1. 問(wèn)題
數(shù)據(jù)處理中一個(gè)令人頭疼的事情是選中數(shù)據(jù)框中的某列時(shí)經(jīng)常會(huì)被降維成列表而不是保持原來(lái)數(shù)據(jù)框的結(jié)構(gòu),如下:
student <- data.frame(ID=c(11,12,13),Name=c("Devin","Edward","Wenli"),Gender=c("M","M","F"))
student

數(shù)據(jù)框
當(dāng)我們想得到name這一行的時(shí)候會(huì)采用以下方法
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
可以看到數(shù)據(jù)都是factor類型的,沒(méi)有保持為數(shù)據(jù)框,而這是不方面的
2. 解決
我們可以利用以下兩種方式避免這種情況的發(fā)生
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
其中注意雙中括號(hào)和單雙括號(hào)的區(qū)別
name5 <- student[["Name"]]
str(name5)
#Factor w/ 3 levels "Devin","Edward",..: 1 2 3
雙中括號(hào)類似于$功能了。