【问题标题】:how can I filter data inside mutate() using a counting function (like NROW) in R?如何使用 R 中的计数函数(如 NROW)过滤 mutate() 中的数据?
【发布时间】:2020-10-19 16:58:14
【问题描述】:

我有一个包含 doc_idfeats 列(两个字符向量)的数据框。我正在尝试为每个doc_id 创建一个新列n_rel_prn,其中包含feats 列中值'PronType=Rel' 的总出现次数。

我不能使用 filter(),因为它会过滤掉我需要的所有其他数据(即feats 的值不是'PronType=Rel'),否则它可以解决问题。 (这是代码 sn-p:)

tcorpus %>% group_by(doc_id) %>%
  filter(feats=='PronType=Rel') %>%
  mutate(n_rel_prn = n())

基本上,我需要一些类似于以下代码的东西(除了实际可行——这显然不可行):

tcorpus %>% group_by(doc_id) %>%
  mutate(n_rel_prn = NROW(feats == 'PronType=Rel'))

有没有办法计算'PronType=Rel' 观察的数量(按 doc_id 分组)并将这些总数添加到新列中? (我假设至少group_by %>% mutate() 是要走的路。)

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你快到了。试试这个:

    tcorpus %>% group_by(doc_id) %>% mutate(n_rel_prn = sum(feats == 'PronType=Rel'))
    

    【讨论】:

    • 不幸的是,这不起作用,它只是用 NA 填充了新的 n_rel_prn 列。
    • 哦,那tcorpus %>% group_by(doc_id) %>% mutate(n_rel_prn = sum(feats == 'PronType=Rel', na.rm = TRUE)) 怎么样?如果这个仍然不起作用,请考虑使用dput(tcorpus) 提供一个可重现的示例。
    • 我将 NA 转换为零并且第一个工作。谢谢!
    • na.rm = TRUE 是一种更安全的方法。我会小心的。
    猜你喜欢
    • 2021-07-01
    • 2015-08-02
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2020-12-13
    相关资源
    最近更新 更多