当使用dplyr tbl_df数据帧进行子设置时,我发现了一些奇怪的行为.当我使用'matrix' style df[,'a']它对数据帧进行子集时,它会按预期返回一个向量.但是,当我在tbl_df数据框中执行相同操作时,它会返回数据框.
我使用Iris数据集在下面复制了它.
有人可以解释为什么会发生这种情况,或者我如何解决数据帧的问题?我需要在构建中使用dplyr和readr来需要这种行为.
library(dplyr)
data(iris)
str(iris['Sepal.Length'])
'data.frame':   150 obs. of  1 variable:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
str(iris[,'Sepal.Length'])
 num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
iris <- tbl_df(iris)
str(iris[,'Sepal.Length'])
Classes ‘tbl_df’ and 'data.frame':  150 obs. of  1 variable:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
这是故意的.
见?tbl_df:
方法:
‘tbl_df’实现两个重要的基本方法:
‘[’永远不要简化(丢弃),所以总是返回data.frame
(重点补充)
如果您class(tbl_df(iris))将看到它的类是"tbl_df",然后是"tbl",最后是"data.frame",那么它可能有不同的[方法,并且methods(class='tbl_df')确实显示出来[.tbl_df.
(这有点像data.table包中的数据表也有不同的[方法).
编辑:取消tbl_df,只需使用data.frame,例如data.frame(tbl_df(iris))将tbl_df(..)返回data.frame.
| 归档时间: | 
 | 
| 查看次数: | 744 次 | 
| 最近记录: |