数据[,“col”]和数据$ col

时间:2015-11-12 05:44:49

标签: r dataframe

来自本网站上其他类似问题的答案,例如:从http://www.r-tutor.com/r-introduction/data-frame/data-frame-column-vector这样的网页中,我似乎从data.frame中提取变量,data[ , "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_excel包中使用readxl阅读:

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类标识符是什么?我怀疑它们是我混淆的原因,它们是什么意思?

1 个答案:

答案 0 :(得分:1)

更多扩展评论:

readxl::read_xltbl_df返回类?read_xl的输出这一事实似乎记录不清。 announcement of readxl on the RStudio blog中提到了这种行为:

&#34; [read_xl r] eturns输出类c("tbl_df", "tbl", "data.frame")&#34;

要详细了解tbl_df,我们需要查看dplyr帮助页面。在?dplyr::tbl_df方法部分中,我们发现了这一点 &#34; tbl_df实现了两个重要的基本方法:[从不简化(删除),因此始终返回data.frame&#34;。

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

相关问答:Extract a dplyr tbl column as a vectorBest practice to get a dropped column in dplyr tbl_df

另见the 'original' issue on github及其中的讨论。