数据框的数据结构与矩阵相似。各列的数据类型可以不相同。数据框的每列是一个变量,每行是一个观测样本。每列的长度必须相同。
创建数据框
数据框使用data.frame函数来创建,其函数原型如下:
data.frame(...,row.names = NULL,stringsAsFactors = default.stringsAsFactors())
其中row.names
为NULL
或指定要用作行名的列的单个整数或字符串,或者给出数据帧的行名的字符或整数向量;stringsAsFactors
用来描述是否将字符型向量自动转换为因子,默认转换,若不改变的话使用stringsAsFactors = FALSE
来指定即可。
例子:
df <- data.frame(姓名 = c("张三","李四","王五"), 成绩 = c(66,77,88),籍贯 = c("天津","北京","广州"))
df <- data.frame(姓名 = c("张三","李四","王五"),成绩 = c(66,77,88),籍贯 = c("天津","北京","广州"),row.names = c("张三信息","李四信息","王五信息"))
#或者分开来写
姓名 <- c("张三","李四","王五")
成绩 <- c(66,77,88)
籍贯 <- c("天津","北京","广州")
df <- data.frame(姓名,成绩,籍贯)
有时用as.data.frame函数可以将另一种数据类型强制转换成数据框类型。
myList <- list(姓名 = c("张三","李四","王五"),成绩 = c(66,77,88),籍贯 = c("天津", "北京","广州"))
df <- as.data.frame(myList)
a <- array(1:20,c(4,5))
df <- as.data.frame(a)
a <- array(1:15,c(3,5),dimnames = list(c("R1","R2","R3"),c("C1","C2","C3","C4","C5")))
df <- as.data.frame(a)
一、直接引用
df <- data.frame(姓名 = c("张三","李四","王五"),成绩 = c(66,77,88),籍贯 = c("天津","北京","广州"))
df[3,3] #返回值为一个因子
df[3,"籍贯"] #与d1[3,3]是一样的
df[2] #返回的是仍是一个数据框
df[2,] #返回的是一个向量
df[,2]
df[,"籍贯"]
df[c(1,3)] #返回的是仍是一个数据框
df[c(1,3),] #返回第1行和第3行的数据
df[,c(1,3)] #与df[c(1,3)]是一样的
df[c(1,2),c(1,3)]
二、使用名称引用
df <- data.frame(姓名 = c("张三", "李四", "王五"),成绩 = c(66,77,88),籍贯 = c("天津", "北京", "广州"))
df["姓名"] #返回值为数据框
df[,"姓名"] #与上面的是一样的
df$姓名
df[["姓名"]]
三、访问具体元素
df <- data.frame(姓名 = c("张三","李四","王五"),成绩 = c(66,77,88),籍贯 = c("天津","北京","广州"))
df$姓名[1]
df[["姓名"]][1]
df[[1]][1]
df[2,3]
df[2,"籍贯"]
df <- data.frame(姓名 = c("张三","李四","王五"),成绩 = c(66,77,88),籍贯 = c("天津", "北京", "广州"),stringsAsFactors = FALSE)
#stringsAsFactors默认值为TRUE,这意味着用字符串创建的数据框,R会将向量处理为因子。如果,不希望这样处理,需要将其强制设置为FALSE
myList <- list("赵四",100,"辽宁")
df <- rbind(df,myList)
#可以用list函数,也可以用c函数
my <- c("赵四",100,"辽宁")
df <- rbind(df,my)
#创建一个新列表,保存性别。使用cbind函数将性别添加到df中
myList <- list(性别 = c("男","男","女"))
df <- cbind(df,myList)
#或者使用
df <- cbind(df,性别 = c("男","男,"女"))
df <- data.frame(df,性别 = c("男","男","女"))
df$性别 <- c("男","男","女")
df$成绩[1] = 99 #修改某个元素的值
df$姓名[1] = "赵四"
df[2,2] = 99
df[[3]][2] = "上海"
df[3,] = c("王二",100,"上海") #修改某一行所有的值
df <- df[-3,] #删除第3行数据
df <- df[,-3] #删除第3列的数据
df <- df[-3] #与上面是一样的
df <- df[c(-2,-3),] #删除第2行和第3行的数据
df <- df[c(-2,-3)] #删除第2列和第3列的数据
df <- df[,c(-2,-3)]
#如果不想改变数据类型,可以使用drop参数
df1 <- df[,c(-2,-3),drop = FALSE] #没有在函数原型列出
《R语言实战》第二版
R语言入门基础
data,frame函数的使用帮助
class函数的使用帮助
上述的使用帮助都可以使用help
函数进行查询。