R語言中的列表和資料框
阿新 • • 發佈:2019-01-06
一、列表
# --列表 #列表是一種特殊的物件集合,跟陣列一樣,他的元素也有序號確定,但是不同點在於可以存在不同型別的元素。 Lst<-list(name="Fred",no.children=3,wife="Lucy",children.ages=c(4,7,9)) # $name # [1] "Fred" # # $no.children # [1] 3 # # $wife # [1] "Lucy" # # $children.ages # [1] 4 7 9 #列表元素可以Lst[[下標]] Lst[[2]];Lst[[1]] # [1] 3 Lst[[4]][2] # [1] 7 #列表不同於向量,下標不能用向量的方式引用 Lst[[1:2]] # Error in Lst[[1:2]] : 下標出界 #需要注意的是list[下標]的方式也是合法的,但是返回的是資料表型別,最為標準的引用型別是list[[下標]], #這樣返回的是原資料型別 #列表的修改 #增加元素 Lst$income<-10000 Lst$name<-"Gavin" Lst$wife<-NULL Lst # $name # [1] "Gavin" # # $no.children # [1] 3 # # $children.ages # [1] 4 7 9 # # $income # [1] 10000
二、資料框
資料框是R種的一個數據結構,他通常是矩陣形式的資料,但矩陣各列可以是不同型別的,資料框每列是一個變數,沒行是一個觀測值。
但是,資料框又是一種特殊的列表物件,其class屬性為“data.frame”,各列表成員必須是向量(數值型、字元型、邏輯型)、因子、數值型矩陣、列表或者其它資料框。向量、因子成員為資料框提供一個變數,如果向量非數值型會被強型轉換為因子。而矩陣、列表、資料框等必須和資料框具有相同的行數。
#----資料框 df<-data.frame( Name=c("Alice", "Becka", "James", "Jeffrey", "John"), Sex=c("F", "F", "M", "M", "M"), Age=c(13, 13, 12, 13, 12), Height=c(56.5, 65.3, 57.3, 62.5, 59.0), Weight=c(84.0, 98.0, 83.0, 84.0, 99.5) ) df # Name Sex Age Height Weight # 1 Alice F 13 56.5 84.0 # 2 Becka F 13 65.3 98.0 # 3 James M 12 57.3 83.0 # 4 Jeffrey M 13 62.5 84.0 # 5 John M 12 59.0 99.5 class(df) # [1] "data.frame" Lst<-list( Name=c("Alice", "Becka", "James", "Jeffrey", "John"), Sex=c("F", "F", "M", "M", "M"), Age=c(13, 13, 12, 13, 12), Height=c(56.5, 65.3, 57.3, 62.5, 59.0), Weight=c(84.0, 98.0, 83.0, 84.0, 99.5) ) Lst # $Name # [1] "Alice" "Becka" "James" "Jeffrey" "John" # $Sex # [1] "F" "F" "M" "M" "M" # $Age # [1] 13 13 12 13 12 # $Height # [1] 56.5 65.3 57.3 62.5 59.0 # $Weight # [1] 84.0 98.0 83.0 84.0 99.5 class(Lst) # [1] "list" as.data.frame(Lst) # Name Sex Age Height Weight # 1 Alice F 13 56.5 84.0 # 2 Becka F 13 65.3 98.0 # 3 James M 12 57.3 83.0 # 4 Jeffrey M 13 62.5 84.0 # 5 John M 12 59.0 99.5 #矩陣也可以轉換為資料框,如果之前有列名就用之前的列名,沒有的話系統會自動起一個 a<-array(1:6,dim=c(2,3)) a # [,1] [,2] [,3] # [1,] 1 3 5 # [2,] 2 4 6 as.data.frame(a) # V1 V2 V3 # 1 1 3 5 # 2 2 4 6 #--資料框的引用,直接用下標、列名來引用資料框 df[1:3,3:4] # Age Height # 1 13 56.5 # 2 13 65.3 # 3 12 57.3 df[["Name"]] # [1] Alice Becka James Jeffrey John # Levels: Alice Becka James Jeffrey John #很明顯轉化為了factor型別 df$Name # [1] Alice Becka James Jeffrey John # Levels: Alice Becka James Jeffrey John names(df) rownames(df)<-c("one","two","three","four","five") df # Name Sex Age Height Weight # one Alice F 13 56.5 84.0 # two Becka F 13 65.3 98.0 # three James M 12 57.3 83.0 # four Jeffrey M 13 62.5 84.0 # five John M 12 59.0 99.5 #在每次引用df中的屬性時,我們都要加上$,為了避免這種麻煩,我們採用attch函式 attach(df) Name #這樣就能直接引用df中的變量了 # [1] Alice Becka James Jeffrey John # Levels: Alice Becka James Jeffrey John detach(df) Name # 錯誤: 找不到物件'Name'