在R語言中,數據框(Dataframe)是一個非常重要的數據結構,其組織數據的結構與矩陣相似,但是其各列的數據類型可以不相同。一般情況,數據框的每列是一個變量,每行是一個觀測樣本。
雖然,數據框內不同的列可以是不同的數據模式,但是數據框內每列的長度必須相同。
1、創建數據框
在R語言中,數據框使用data.frame()函數來創建,其格式如下:
data.frame(col1,col2,..., row.name=NULL, check.rows = FALSE,check.names=TRUE,stringsAsFactors = default.stringsAsFactors())
其中,row.name用于指定各行(樣本)的名稱,默認沒有名稱,使用從1開始自增的序列來標識每一行;check.rows用于用來檢查行的名稱和數量是否一致,默認為FALSE;check.names來檢查變量(列)的名稱是否唯一且符合語法,默認為TRUE;用來描述是否將字符型向量自動轉換為因子,默認轉換,若不改變的話使用stringsAsFactors = FALSE來指定即可。
(1)df1<-data.frame(name=c("王宏", "馬蘭", "劉濤", "張峰"), sex=c("男", "女", "男", "男"), score=c(90, 85, 82, 93))
(2)df2<-data.frame(name=c("王宏", "馬蘭", "劉濤", "張峰"), sex=c("男", "女", "男", "男"), score=c(90, 85, 82, 93), row.names=c("s1", "s2", "s3", "s4"))
(3)
name <- c("王宏", "馬蘭", "劉濤", "張峰") #向量
sex <- c("男", "女", "男", "男") #向量
score <- c(90, 85, 82, 93) #向量
df3<-data.frame(name, sex, score) #使用向量生成數據框
以上的執行情況如下圖所示,(若圖較小,可以點擊查看大圖)
(4)lst<-list(name=c("王宏","馬蘭","劉濤","張峰"), sex=c("男", "女", "男", "男"), score=c(90, 85, 82, 93))
df4<-as.data.frame(lst)
本部分執行代碼如下圖所示,(若圖較小,請點擊看大圖)
(5)arr1 <- array(1:12,c(4,3))
df5 <- as.data.frame(arr1) #使用數組生成數據框
arr2<- array(1:12, c(4,3),dimnames=list(c("R1","R2","R3","R4"), c("C1","C2","C3")))
df6 <- as.data.frame(arr2)
本部分執行情況如下圖所示:
(6) m1 <- matrix(c(1:12),nr=3)
df7<-as.data.frame(m1)
m2<-matrix(c(1:12),nr=3,dimnames=list(c("R1","R2","R3")))
df8<-as.data.frame(m2)
m3<-matrix(c(1:12),nr=3,dimnames=list(c(),c("C1","C2","C3","C4")))
df9<-as.data.frame(m3)
本部分的執行情況如下:
在使用數組,矩陣生成數據框時,若沒有指定列名,則以"V1","V2”......進行代替。
2、數據框的引用
(1)df1["score"] #仍為一個數據框, 也是一個列表
(2)df1[,"score"] #返回的是向量
(3)df1[3] #同(1)
(4)df1[,3] #同(2)
(5)df1[c(1,3)] #返回第1列和第3列的數據
以上執行情況如下圖所示:
(6)df1[c(1,3),] #返回第1行和第3行的數據
(7)df1[c(1,3),c(2,3)] #返回第1行和第3行與第2列和第3列交叉處的數據
(8)df1$name #以因子的形式返回name列
(9)df1[["name"]] #以因子的形式返回name列
(10)df1[[1]][1] #返回第1分量的第一個元素值,王宏
(11)df1[['name']][1] #返回name分量第一個元素值:王宏
(12)df1$name[1] #返回name分量第一個元素值:王宏
3、數據框的修改
(1)增加樣本數據或變量
可以使用rbind()函數和cbind()函數將新行或新列添加到數據框變量中。
lst1<-list("馬宇","男",92) #創建一個新列表
df1<-rbind(df1,lst1) #將列表lst1添加到df1中
lst2<-list(height=c(170,178,185,190,178,175)) #創建一個新列表,保存身高
df1<-cbind(df1,lst2) #使用cbind將lst2添加到df1中
本部分執行情況如下圖所示:
(2)修改某列的某一個值
df1$name[1] <- "王宏偉" #將王宏的值修改為王宏偉
df1[1,2] <- "女" #將第一行第2列的值修改為“女”
df1[[1]][2]<-"馬蘭蘭" #將第一列第二個值改為“馬蘭蘭”
(3)刪除行或列
df1<-df1[-2,] #刪除第2行數據
df1<-df1[,-4] #刪除第4列的數據
df1<-df1[-c(1,3),] #刪除第1行和第3行的數據
df1<-df1[,-c(1,4)] #刪除第1列和第4列的數據
本部分(完)
新聞熱點
疑難解答