gpt4 book ai didi

r - 为什么子集会随着 dplyr 中的 tbl_df 发生变化?

转载 作者:行者123 更新时间:2023-12-04 10:39:21 28 4
gpt4 key购买 nike

在使用 dplyr tbl_df 数据帧进行子设置时,我发现了一些奇怪的行为。当我使用 'matrix' style df[,'a'] 对数据帧进行子集化时它按预期返回一个向量。但是,当我在 tbl_df 上做同样的事情时数据帧,它返回一个数据帧。

我在下面使用 Iris 数据集复制了它。

有人可以解释为什么会发生这种情况,或者我可以如何 de-tbl_df 数据帧?我需要在构建中使用 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 :

Methods:

‘tbl_df’ implements two important base methods:

print Only prints the first 10 rows, and the columns that fit on screen

‘[’ Never simplifies (drops), so always returns 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(..)回到数据框。

关于r - 为什么子集会随着 dplyr 中的 tbl_df 发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31443267/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com