【发布时间】:2019-02-24 03:28:34
【问题描述】:
我正在尝试在 R 中复制 SUMIFS 功能。我有两个数据框。
数据框 1
allReported
ID employeeGroup
1093 Bargaining Unit
1093 Management
1093 Non-Union
55 Bargaining Unit
55 Management
55 Non-Union
数据框 2
employeeCompSummary
ID employeeGroup statBenefits regularWages
1093 Management 500.00 10000.00
1093 Management 200.00 60000.00
1093 Bargaining Unit 100.00 20000.00
1093 Bargaining Unit 150.00 30000.00
1093 Non-Union 500.00 60000.00
55 Bargaining Unit 750.00 65000.00
55 Bargaining Unit 500.00 75000.00
55 Management 250.00 45000.00
55 Management 850.00 90000.00
我正在尝试汇总 statBenefits(然后是正常工资)以创建一个新表,该表将产生以下结果:
ID employeeGroup statBenefits
1093 Bargaining Unit 250.00
1093 Management 700.00
1093 Non-Union 500.00
55 Bargaining Unit 1250.00
55 Management 1100.00
55 Non-Union 0.00
我尝试了以下方法:
library(data.table)
setDT(allReported)[, list(total=sum(statbenefits)), list(employeeCompSummary, employeeGroup)]
并得到以下错误:
Error in `[.data.table`(setDT(allReported), , list(total = sum(statbenefits)), : column or expression 1 of 'by' or 'keyby' is type list. Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]
我也试过了:
sumTest <- aggregate(allReported, by = list(employeeCompSummary), sum)
并得到以下错误:
**Error in aggregate.data.frame(allReported, by = list(employeeCompSummary), : arguments must have same length**
任何人都可以提供任何帮助,我们将不胜感激。我查看了其他似乎可以解决此问题但无法找到有效答案的问题。我将在多件事上完成这项任务,所以我想知道是否有任何人都知道的简单技术。与往常一样,提前感谢 Stack Overflow 上的精彩社区。p>
编辑两个示例表的 dput():
allReported <- structure(list(ID = c(1093, 1093, 1093, 1093, 1093, 55, 55, 55,55), employeeGroup = c("Management", "Management", "Bargaining Unit","Bargaining Unit", "Non-Union", "Bargaining Unit", "Bargaining Unit","Management", "Management"), statBenefits = c(500, 200, 100,150, 500, 750, 500, 250, 850), regularWages = c(10000, 60000,20000, 30000, 60000, 65000, 75000, 45000, 90000)), row.names = c(NA,-9L), class = c("tbl_df", "tbl", "data.frame"))
employeeCompSummary <- structure(list(ID = c(1093, 1093, 1093, 55, 55, 55), employeeGroup =c("Bargaining Unit","Management", "Non-Union", "Bargaining Unit", "Management", "Non-Union")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))
.
【问题讨论】:
-
数据对工作来说是机密的,这就是我列出上面示例表的原因。
-
你能提供
dput格式的表格吗?这将使帮助者更容易
标签: r data.table aggregate