来自本网站上其他类似问题的答案,例如:从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_df
和tbl
类标识符是什么?我怀疑它们是我混淆的原因,它们是什么意思?
答案 0 :(得分:1)
更多扩展评论:
readxl::read_xl
中tbl_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 vector和Best practice to get a dropped column in dplyr tbl_df。
另见the 'original' issue on github及其中的讨论。