【问题标题】:dplyr count within subgroup子组内的 dplyr 计数
【发布时间】:2016-03-18 18:46:13
【问题描述】:

我有以下数据框:

df<-data.frame(Date=rep(x=as.Date(c("2016/01/01", "2016/01/02")),each=12),
       Group=rep(x=c("G1","G2"),each=6,times=2),
       ID=rep(c("G1F1","G1F2","G1F3","G1M4","G1M5","G1M6","G2F1","G2F2","G2F3","G2M4","G2M5","G2M6"),times=2),
       Gender=rep(c("Female","Male"),each=3,times=4),
       Weight=c(c(100,100,100,100,120,140),rep(c(100,120,140,100,100,100),times=2),c(100,100,100,100,120,140)))

我想创建一个新列CountComp,它显示在给定日期,体重在每行中指定的个人体重上下 10 克以内的个人的同性别同组成员计数,例如至于得到:

df2<-data.frame(Date=rep(x=as.Date(c("2016/01/01", "2016/01/02")),each=12),
           Group=rep(x=c("G1","G2"),each=6,times=2),
           ID=rep(c("G1F1","G1F2","G1F3","G1M4","G1M5","G1M6","G2F1","G2F2","G2F3","G2M4","G2M5","G2M6"),times=2),
           Gender=rep(c("Female","Male"),each=3,times=4),
           Weight=c(c(100,100,100,100,120,140),rep(c(100,120,140,100,100,100),times=2),c(100,100,100,100,120,140)),
           CountComp=c(c(2,2,2,0,0,0),rep(c(0,0,0,2,2,2),times=2),c(2,2,2,0,0,0)))

我对 R 非常陌生,并认为 dplyr 可以使用 group_bymutate 函数提供解决方案,但到目前为止还没有找到。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这样的东西可以工作

    df %>% group_by(Date, Group, Gender) %>% 
        mutate(CountComp=sapply(Weight, function(x) sum(abs(x-Weight)<10)-1))
    

    在这里,我们使用group_by 来获取您想要计算的课程。然后我们使用mutate 来获取新列。我们需要将每个值与组中的每个其他值进行比较。对我来说,最简单的方法是使用 sapply 一次查看每个重量,并将其与其他重量进行比较,寻找小于 10 的差异。

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多