【问题标题】:Mutating a count of rows per group matching a subset condition改变每组匹配子集条件的行数
【发布时间】:2021-03-11 19:12:30
【问题描述】:

我希望改变一个名为 SF_COUNT 的新列,它是列类型包含“SF”的每组行数的每组计数 (ID)

一个可重现的例子如下:

df <- data.frame(ID = c(1234,1234,1234,4567,4567,4567,4567,8900,8900,8900),type = c('RF','SF','SF','RF','SF','SF','SF','RF','SF','SF'))

我的最终数据框如下所示:

final_df <- data.frame(ID = c(1234,1234,1234,4567,4567,4567,4567,8900,8900,8900),type = c('RF','SF','SF','RF','SF','SF','SF','RF','SF','SF'), SF_COUNT = c(2,2,2,3,3,3,3,2,2,2))

请问如何在 dplyr 中实现这一点?

【问题讨论】:

  • 您的输入示例将“SF”显示为字符串而不是“SJ”
  • @akrun 谢谢你,我脑子有病!

标签: r dplyr


【解决方案1】:

按'ID'分组后,获取mutate中逻辑vectortype == 'SF')的sum创建新列

library(dplyr)
df <- df %>% 
    group_by(ID) %>% 
    mutate(SF_COUNT = sum(type == 'SF', na.rm = TRUE))

如果是子串,则使用str_detect

library(stringr)
df <- df %>% 
    group_by(ID) %>% 
    mutate(SF_COUNT = sum(str_detect(type, 'SF'), na.rm = TRUE))

【讨论】:

  • 再次感谢,我尝试了所有各种类型的子设置,add_count,nrows,你能说出它的名字,但我无法得到它。您上面的示例很简洁,但您也花时间解释了逻辑。手感不错!
猜你喜欢
  • 1970-01-01
  • 2014-03-24
  • 2021-02-12
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多