r语言 - data[, "col" ] 和 data$col 之间的差异



来自本网站上关于类似问题的其他答案,例如来自以下页面http://www.r-tutor.com/r-introduction/data-frame/data-frame-column-vector,似乎我从data.framedata[ , "col"]data$col中提取一个变量应该会产生相同的结果。但现在我在Excel中有一些数据:

LU  Urban_LU    LU_Index    Urban_LU_index
Residential Residential 2   0
Rural residential   Residential 3   0
Commercial  Commercial  4   1
Public institutions including education Industrial  5   1
Industry    Industrial  7   2

)

我用read_excelreadxl包中读取:

library(readxl)
data <- read_excel("data.xlsx", "Sheet 1")

现在,我使用[$:从数据帧中提取一个变量

data[ , "LU"]
# Source: local data frame [5 x 1]
# 
#                                        LU
#                                     (chr)
# 1                             Residential
# 2                       Rural residential
# 3                              Commercial
# 4 Public institutions including education
# 5                                Industry
data$LU
# [1] "Residential"                             "Rural residential"                      
# [3] "Commercial"                              "Public institutions including education"
# [5] "Industry"                               
length(data[ , "LU"])
# [1] 1
length(data$LU)
# [1] 5

此外,我发现可疑的是从read_excel获得的数据类别和从两种不同的提取模式得出的数据:

class(data)
# [1] "tbl_df"     "tbl"        "data.frame"
class(data[ , "LU"])
# [1] "tbl_df"     "data.frame"
class(data$LU)
# [1] "character"
> 

那么[ , "col"]$col之间有什么区别呢?我是在手册中遗漏了什么,还是这是一个特例?另外,tbl_dftbl类标识符是什么?我怀疑它们是我困惑的原因,它们是什么意思?

更多扩展注释:

readxl::read_xl返回类tbl_df的输出这一事实在?read_xl中似乎没有得到很好的记录。在RStudio博客上发布的readxl中提到了这种行为:

"[read_xl r]使用类c("tbl_df", "tbl", "data.frame")返回输出"

要了解有关tbl_df的更多信息,我们需要查阅dplyr帮助页面。在?dplyr::tbl_df方法部分中,我们发现"tbl_df实现了两个重要的基本方法:[从不简化(丢弃),所以总是返回data.frame"。

有关更多背景信息,请阅读?[.data.frame中的drop参数。

相关问答;A: 提取一个dplyr-tbl列作为向量,最佳实践是在dplyr-tbl_df中获得一个删除的列。

另请参阅github上的"原始"问题及其讨论。

最新更新