【问题标题】:How to check multiple columns and add sum of 1 column in R如何检查多列并在R中添加1列的总和
【发布时间】:2021-01-28 08:19:40
【问题描述】:

我有一个 data.frame df

 emp = c("k","j","b","s","sy")
Exp = c(11,10,10,10,10)
Supv1 = c("d","k","j","k","an")
Supv2 = c("a","d","k","d", "a")

df <- data.frame(emp, Exp, Supv1, Supv2)

emp Exp Supv1 Sup2
 k    11  d     a
 j    10  k     d
 b    10  j     k
 s    10  k     d
 sy   10  an    a

emp 与费用并显示 emp 的报告级别 1 和下一个更高的 supv2

现在我想通过在 1 级和 2 级和相应的 exp 上对每个主管进行 chach 来获得一个 outup。这样我就得到了主管的控制费用的总跨度

所以在检查 Supv1 和 Supv 2 列后,输出为

Sup  total.exp
d      31  
k      30
j      10
an     10
a      21

我使用了多个 group_by 并汇总然后 rbind 输出。然后进行最终总结以获得上述输出。是否有任何 apply() 系列函数可以简单地做到这一点?

【问题讨论】:

  • 既然你已经尝试过解决这个问题,你也可以包含代码。

标签: r


【解决方案1】:

你可以使用aggregate:

aggregate(list(total.exp=rep(df$Exp, 2))
 , list(Sup=unlist(df[,c("Supv1","Supv2")])), sum)
#  Sup total.exp
#1   a        21
#2  an        10
#3   d        31
#4   j        10
#5   k        30

【讨论】:

    【解决方案2】:

    获取长格式数据,按 Supervisor 值分组并取其中sum

    library(dplyr)
    library(tidyr)
    
    df %>%
      pivot_longer(cols = starts_with('Supv')) %>%
      group_by(value) %>%
      summarise(Exp = sum(Exp))
    
    #  value   Exp
    #* <chr> <dbl>
    #1 a        21
    #2 an       10
    #3 d        31
    #4 j        10
    #5 k        30
    

    【讨论】:

    • 谢谢@ronak-shah 作为 44 岁的初学者,需要了解更多。不能分享我的工作,会很尴尬,太长了:)
    • @ChakravarthyGKalyan 很高兴得到帮助!随时点击左侧的复选标记accept the answer。每个帖子只能接受一个答案。
    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2022-07-22
    • 2019-05-01
    • 1970-01-01
    • 2020-10-27
    相关资源
    最近更新 更多