1. 问题
数据处理中一个令人头疼的事情是选中数据框中的某列时经常会被降维成列表而不是保持原来数据框的结构,如下:
student <- data.frame(ID=c(11,12,13),Name=c("Devin","Edward","Wenli"),Gender=c("M","M","F"))
student
数据框
当我们想得到name这一行的时候会采用以下方法
name1 <- student$Name
name2 <- student[,2]
str(name1)
str(name2)
#Factor w/ 3 levels "Devin","Edward",..: 1 2 3
#Factor w/ 3 levels "Devin","Edward",..: 1 2 3
可以看到数据都是factor类型的,没有保持为数据框,而这是不方面的
2. 解决
我们可以利用以下两种方式避免这种情况的发生
name3 <- student[,2,drop = FALSE]
name4 <- student["Name"]
str(name3)
str(name4)
#'data.frame': 3 obs. of 1 variable:
#$ Name: Factor w/ 3 levels "Devin","Edward",..: 1 2 3
#'data.frame': 3 obs. of 1 variable:
#$ Name: Factor w/ 3 levels "Devin","Edward",..: 1 2 3
其中注意双中括号和单双括号的区别
name5 <- student[["Name"]]
str(name5)
#Factor w/ 3 levels "Devin","Edward",..: 1 2 3
双中括号类似于$功能了。
网友评论