gpt4 book ai didi

r - 为什么从数据框和小标题中子集一列会给出不同的结果

转载 作者:行者123 更新时间:2023-12-04 16:30:58 25 4
gpt4 key购买 nike

这是一个“为什么”的问题,而不是一个“如何”的问题。

我有一个 tibble作为聚合的结果 dplyr

> str(urls)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 144 obs. of 4 variables:
$ BRAND : chr "Bobbi Brown" "Calvin Klein" "Chanel" "Clarins" ...
$ WEBSITE : chr "http://www.bobbibrowncosmetics.com/" "http://www.calvinklein.com/shop/en/ck" "http://www.chanel.com/en_US/" "http://www.clarinsusa.com/" ...
$ domain : chr "bobbibrowncosmetics.com/" "calvinklein.com/shop/en/ck" "chanel.com/en_US/" "clarinsusa.com/" ...
$ final_domain: chr "bobbibrowncosmetics.com/" "calvinklein.com/shop/en/ck" "chanel.com/en_US/" "clarinsusa.com/" ...

当我尝试将列 final_domain 提取为字符向量时,会发生以下情况:
> length(as.character(urls[ ,4]))
[1] 1

相反,当我强制使用数据框然后执行它时,我得到了我真正想要的:
> length(as.character(as.data.frame(urls)[ ,4]))
[1] 144
str tibble vs. dataframe 看起来相同但输出不同。我想知道为什么?

最佳答案

根本原因是当仅选择一列时,子集 tbl 和数据框会产生不同的结果。

  • 默认情况下,[.data.frame如果结果只有 1 列,则将删除维度,类似于矩阵子集的工作方式。所以结果是一个向量。
  • [.tbl_df永远不会像这样丢弃维度;它总是返回一个 tbl。

  • 反过来, as.character忽略 tbl 的类,将其视为普通列表。和 as.character在列表上调用就像 deparse :它返回的字符表示是可以解析和执行以重现列表的 R 代码。

    在大多数情况下,tbl 行为可以说是正确的做法,因为删除维度很容易导致错误:子集一个数据框通常会导致另一个数据框,但有时不会。在这种特定情况下,它不会执行您想要的操作。

    如果要从 tbl 中提取列作为向量,可以使用列表样式索引: urls[[4]]urls$final_domain .

    关于r - 为什么从数据框和小标题中子集一列会给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39918774/

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