【问题标题】:How to sum row percentages based on another same row value in R?如何根据 R 中的另一个相同行值对行百分比求和?
【发布时间】:2019-03-30 19:12:49
【问题描述】:

我的数据集由鲸鱼叫声组成。我有两个变量:nclicks 和百分比。 nclicks 是指调用中的点击次数(范围从 3 到 30)。百分比是指在给定年份拨打该类型电话的频率。我想总结较长调用的百分比(点击次数超过 11 次),并在数据框中添加一个新行,其中 nclicks 为 11+,百分比总和百分比。然后我想删除组成新行的行。

我尝试将“nclicks”编码为因子和数字。我使用了聚合、rowSums、rbind 等的组合,但没有运气。我最接近的是获得一个具有总百分比的新行,但我必须手动指定要包含哪些行(参见下面的示例)。此方法还对 nclicks 值求和(因此在下面的示例中,我得到一个新行,其中 nclicks 为 43(11+12+20),百分比为 20,当我真的希望行号为 4 时,nclicks 为 11 +,百分比为 20)。

nclicks=c(3,4,5,11,12,20) 

percent=c(30,30,20,10,5,5) 

df=data.frame(cbind(nclicks,percent)) 

df["11+",]=df["4",]+df["5",]+df["6",] 

df=df[-c(4,5,6), ] 

df

这就是我最终的结果:

 nclicks percent
1         3      30
2         4      30
3         5      20
11+      43      20

我想对 nclicks 的值大于 10 的行的百分比求和,但执行此操作时遇到问题。我不想单独指定要包含的 nclicks 值,因为有些年份有许多不同的 nclick 值 > 10,而有些年份只有几个不同的值 > 10。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以创建一个group 列来帮助聚合nclicks>=11 所在的行。

    library("tidyverse")
    
    nclicks <- c(3, 4, 5, 11, 12, 20)
    percent <- c(30, 30, 20, 10, 5, 5)
    
    df <- tibble(nclicks, percent)
    df <- df %>%
      mutate(group = ifelse(nclicks >= 11, "11+", nclicks)) %>%
      group_by(group) %>%
      summarise_at(vars(nclicks, percent), sum)
    df
    #> # A tibble: 4 x 3
    #>   group nclicks percent
    #>   <chr>   <dbl>   <dbl>
    #> 1 11+        43      20
    #> 2 3           3      30
    #> 3 4           4      30
    #> 4 5           5      20
    

    reprex package (v0.2.1) 于 2019 年 3 月 31 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-16
      • 2016-01-17
      • 2021-08-09
      • 2023-01-18
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多