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)