R语言——dataframe

目录
R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的。

使用data.frame函数构建dataframe

student<-data.frame(ID=c(11,12,13),  #第一列
                    Name=c("Devin","Edward","Wenli"),  #第二列
                    Gender=c("M","M","F"),  #第三列
                    Birthdate=c("1984-12-29","1983-5-6","1986-8-8”),  #第四列
                    )

student
  ID   Name Gender  Birthdate
1  11  Devin      M 1984-12-29
2  12 Edward      M   1983-5-6
3  13  Wenli      F   1986-8-8

访问元素

# 访问某一列,返回向量(使用[[]]或$访问)
name<-student[[2]] 
或
name<-student[[“Name”]] 
或
name<-student$Name

设置行列名

rownames(dataframe) = dataframe[,1]  #将第一列设为行名
dataframe = dataframe[,-1]  #删除第一列

colnames(dataframe) = dateframe[1,]  #将第一行设为行名

获取行列名

rownames(dataframe)    # 以列表形式返回行名
colnames(dataframe)    # 以列表形式返回列名

列的对象类型

str(student)  #查看该对象每列的类型
'data.frame':3 obs. of  4 variables:
 $ ID       : num  1 2 3
 $ Name     : Factor w/ 3 levels "Devin","Edward",..: 1 2 3
 $ Gender   : Factor w/ 2 levels "F","M": 2 2 1
 $ Birthdate: Factor w/ 3 levels "1983-5-6","1984-12-29",..: 2 1 3

# 对列的数据类型进行更改
student$Name<-as.character(student$Name)
student$Birthdate<-as.Date(student$Birthdate)

添加新列

student$new_col = c(1,2,3)

查询/子集

# 查询所有Gender为F的数据
student[which(student$Gender=="F"),]  #首先对student$Gender==“F”,得到一个布尔向量:FALSE FALSE TRUE,然后使用which函数可以将布尔向量中TRUE的Index返回
student[which(student$Gender=="F"),"Age"]  #查询所有女性的年龄

#直接使用subset函数查询
subset(student,Gender=="F" & Age<30 ,select=c("Name","Age"))  #查询年龄<30的女性的姓名和年龄

拼接/合并

#增加列匹配拼接————merge()
score<-data.frame(SID=c(11,11,12,12,13),
                  Course=c("Math","English","Math","Chinese","Math"),
                  Score=c(90,80,80,95,96),
                  )
score
  SID  Course Score
1  11    Math    90
2  11 English    80
3  12    Math    80
4  12 Chinese    95
5  13    Math    96

result<-merge(student,score,by.x="ID",by.y="SID")  #按ID和SID匹配拼接两dataframe
result
 ID   Name Gender  Birthdate Age  Course Score
1 11  Devin      M 1984-12-29  31    Math    90
2 11  Devin      M 1984-12-29  31 English    80
3 12 Edward      M 1983-05-06  32    Math    80
4 12 Edward      M 1983-05-06  32 Chinese    95
5 13  Wenli      F 1986-08-08  29    Math    96

#两个列一样的DataFrame拼接在一起————rbind()
student2<-data.frame(ID=c(21,22),
                      Name=c("Yan","Peng"),
                      Gender=c("F","M"),
                      Birthdate=c("1982-2-9","1983-1-16"),
                      Age=c(32,31),
                      )
rbind(student,student2)
上一篇:Directx11教程(61) tessellation学习(3)


下一篇:函数的递归