R語言之數據結構

来源:http://www.cnblogs.com/dm-cc/archive/2016/07/26/5708385.html
-Advertisement-
Play Games

R擁有許多用於存儲數據的對象類型,包括標量、向量、矩陣、數組、數據框、列表、因數。 1.標量:標量是只包含一個元素的向量 > a <- 1; # 數值型 > b <- "China"; # 字元型 > c <- TRUE; # 邏輯型 2.向量:向量用於存儲數值型、字元型或邏輯型數據的一維數組。通過 ...


R擁有許多用於存儲數據的對象類型,包括標量、向量、矩陣、數組、數據框、列表、因數

1.標量:標量是只包含一個元素的向量

> a <- 1;  # 數值型
> b <- "China"; # 字元型
> c <- TRUE; # 邏輯型

2.向量:向量用於存儲數值型、字元型或邏輯型數據的一維數組。通過利用c()函數來創建向量

> d <- c(1,2,3);
> e <- c("China","USA");
> f <- c(T,F,F,T);

3.矩陣(matrix):矩陣是一個二維數組,每個元素都擁有相同的模式(數值型、字元型、邏輯型),一般通過函數matrix()來創建矩陣

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
data:包含了矩陣的元素;
nrow 和 ncol:用於指定矩陣的行數和列數;
byrow=F:預設創建的矩陣按照列進行排列;
dimnames:創建矩陣時可以設置行和列的名稱(必須為列表形式);
> m1 <- matrix(1:8,nrow=4)
#預設按列填充
> m1
     [,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8

#設置byrow=T,將元素按照行進行填充
> m2 <- matrix(1:8,nrow=4,byrow=T)
> m2
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
[4,]    7    8

# 設置矩陣行和列的名稱
> m3 <- matrix(1:8,nrow=4,byrow=T,dimnames=list(c("r1","r2","r3","r4"),c("c1","c2")))
> m3
   c1 c2
r1  1  2
r2  3  4
r3  5  6
r4  7  8

4.數組(array):與矩陣類型,但是維度可以大於2,數組可以通過array()函數進行創建;數組中的數據也只能擁有一種模式(數據類型),如果數組中的數據有其他的數據類型,R會自動將所有數據轉換為同一模式

array(data = NA, dim = length(data), dimnames = NULL)
data:包含了數組中的數據;
dim:是一個數值型的向量,給出了各個維度下標的最大值;
dimnames:各個維度名稱標簽的列表;
> arr <- array(1:24,dim=c(4,3,2))
> arr
, , 1

     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

, , 2

     [,1] [,2] [,3]
[1,]   13   17   21
[2,]   14   18   22
[3,]   15   19   23
[4,]   16   20   24
5.數據框(data.frame):數據框類似於二維表格,包含行和列,是R中最常處理的數據結構。不同的列可以包含不同的模式,每一列數據的模式必須唯一;數據框可以通過函數data.frame()進行創建
data.frame(..., row.names = NULL, check.rows = FALSE,
           check.names = TRUE,
           stringsAsFactors = default.stringsAsFactors())
row.names:設置數據框行的名稱;
check.rows:預設為FALSE,檢查行的名稱和數量是否一致;
check.names:邏輯值,預設為TRUE,如果為TRUE,變數的名稱不能夠重覆,如果重覆,則R會自動進行轉換以保證列名不同;
stringsAsFactors :是否將字元串轉換為因數(factor)類型,stringsAsFactors 預設為TRUE,即default.stringsAsFactors()的值為TRUE,將字元串轉換為因數;
> g <- data.frame(a=c(1,2,3),a=c(4,5,6),row.names=c("n1","n2","n3"),check.names=T)
> g
   a a.1
n1 1   4
n2 2   5
n3 3   6
> g["a.1"]  #由於數據框g有重覆列名a,因為設置了check.names=T,R內部會自動將第二列的列名a轉換為a.1
   a.1
n1   4
n2   5
n3   6

6.列表(list):是一個有序對象的集合,列表允許整合若幹對象到單個對象名下,可以通過list()函數進行創建

> k <- list(d=5:9,e="China") # 創建列表k,包括d和e兩個對象
> l <- list(title="mylist",a=1:3,b=matrix(1:8,nrow=2),c=c("one","two"),k)  #創建列表l,l列表中包含了列表k(列表中也可以包含列表對象)
> l
$title
[1] "mylist"

$a
[1] 1 2 3

$b
     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8

$c
[1] "one" "two"

[[5]]
[[5]]$d
[1] 5 6 7 8 9

[[5]]$e
[1] "China"

7.因數(factor):類別(名義型)變數和有序類別(有序型)變數在R中稱為因數。因數型數據在電腦內部存儲為整型數據,因數水平屬性將每個整型數據映射到一個因數水平上。因為整型數據占的存儲空間較少,因    此這種方式比字元串向量更節省存儲空間。

factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)
x:用於轉換為因數的字元向量數據;
levels:因數水平向量,因數型變數可以取得的所有值被稱為因數水平;
labels:字元型向量,labels與levels有相同的數量或者只有一個;
excelude:生成水平時要去除的水平;
ordered:預設為FALSE,設置為TRUE,表示有序型變數,用以確定levels 是否應該被視為有序的(按照給定的順序);
nmax: 設定水平數量的上限值
> x <- factor(x=c("middle","small","big","large"),levels=c("small","middle","big","large"),ordered=T)
> x
[1] middle small  big    large 
Levels: small < middle < big < large   # R在輸出有序因數時會顯示因數水平的順序

> y <- factor(x=c("middle","small","big","large"),levels=c("small","middle","big","large"),ordered=T,labels=c(1,2,3,4))
> y
[1] 2 1 3 4
Levels: 1 < 2 < 3 < 4

> z <- factor(x=c("middle","small","big","large"),levels=c("small","middle","big","large"),exclude=c("small","middle"))  
> z
[1] <NA>  <NA>  big   large   # 由於去除了水平small和middle,所以原始數據中水平為small和middle的值輸出為NA
Levels: big large  

> x.integer <- unclass(x)   # 通過移除因數x的類屬性創建整型向量x.integer  註意此時因數x本身並沒有發生變化
> x.integer
[1] 2 1 3 4
attr(,"levels")
[1] "small" "middle" "big" "large" 
> class(x.integer)
[1] "integer"


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這個類庫是本人參考許多相關資料之後做出的C#矩陣運算類庫,因為C#的數值計算庫相對比較少,所以希望這個類庫能夠給大家帶來一些幫助。 源碼github網址:https://github.com/JoshuaHe2015/MatrixLibrary 功能介紹:(持續更新中) 1、矩陣的基本運算: 矩陣的 ...
  • 如過客戶端在向服務端介面進行請求,如果請求信息進行了加密處理,被第三方截取到請求包,雖然第三方無法解密獲取其中的數據,但是可以使用該請求包進行重覆的請求操作。如果服務端不進行防重放攻擊,就會參數伺服器壓力增大,數據紊亂的後果。而使用添加時間戳的方式可以解決這一問題。 ...
  • 強制類型轉換 package hello; import java.util.Scanner; public class Hello { public static void main(String[] args) { // TODO Auto-generated method stub Scann ...
  • curry翻譯為中文就是咖喱。意為使用curry可以讓代碼更有味道。 scala里的curry化可以把函數從接收多個參數轉換成接收多個參數列表。也就是說我們要編寫的函數不是只有一個參數列表,這個參數列表中有多個參數以逗號分隔;而是一個函數中有多個參數列表,每個參數列表中只有一個參數(當然,也可以有多... ...
  • 結合關係 一般自左向右 單目+- 和 賦值= 自右向左 ...
  • 一、前言 七月的天氣分外炎熱,心中燥意難以撫平,決定梳理下之前落下的筆記。正好最近對JMM比較感興趣,就整理出了這篇文字。 二、序言 即使你的程式沒有顯示的創建任何線程,框架也可能為你創建了一些線程,這些線程調用的代碼必須是線程安全(thread safe)的。這一點給開發人員的設計和實現賦予了更重 ...
  • 第一問:為什麼學習Python? 虛妖說:為了還債,還技術債,很早接觸編程,卻一直徘徊,也碼了很多代碼,卻從未真真學會編程! 第二問:什麼是Python 是一種以簡潔、優雅著稱的解釋型、動態、強類型的高級編程語言; 簡潔和優雅: 體現在Python的語法風格,最明顯的一點是縮進,其他語言中縮進本來是 ...
  • package hello; import java.util.Scanner; public class Hello { public static void main(String[] args) { // TODO Auto-generated method stub System.out.p ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...