为了完整起见,我想展示我们如何使用参数drop 从多列数据帧中获取一列数据帧。另外,我使用tidyverse 宇宙(paper) 解释结果。
使用数据框 DF 的最小示例
library(tidyverse)
DF <- data.frame(a = 1:2, b = c("e", "f"))
str(DF)
#> 'data.frame': 2 obs. of 2 variables:
#> $ a: int 1 2
#> $ b: chr "e" "f"
顺便提一下,在低于 4.0 的 R 版本中,b 列默认是一个因素(除非我们使用 stringsAsFactors= FALSE)
运算符[返回一个列表(数据帧),因为它保留了原始结构(数据帧)
DF[1]
#> a
#> 1 1
#> 2 2
DF['a']
#> a
#> 1 1
#> 2 2
另一方面,运算符[[ 将结果简化为可能的最简单结构,即单列数据帧的向量。在它的三个表达式中,你总是得到简化版(一个向量)
DF[[1]]
#> [1] 1 2
DF[['a']]
#> [1] 1 2
DF$a
#> [1] 1 2
最后,使用[ 与行和列维度
DF[, 1]
#> [1] 1 2
还返回简化版本,因为参数 drop 默认设置为 TRUE。将其设置为 FALSE,您将保留结构并获得一列数据帧
DF[, 1, drop = FALSE]
#> a
#> 1 1
#> 2 2
可以在以下位置找到对这一点的一个很好的解释:Advanced R by Hadley Wickham, CRC, 2015, section 3.2.1 or section 4.2.5 in the online version of the book (June 2021)
最后,在tidyverse 宇宙CRAN 中,您在选择一列时总是会获得一个数据框(tibble)
DF %>%
select(2)
#> b
#> 1 e
#> 2 f
DF %>%
select("a")
#> a
#> 1 1
#> 2 2
DF %>%
select(a)
#> a
#> 1 1
#> 2 2
由reprex package (v0.3.0) 于 2021-06-04 创建