我有一个包含不同列的数据框 df
。
df = data.frame(c("2012","2012","2012","2013"),
c("AAA","BBB","AAA","AAA"),
c("X","Not-serviced","X","Y"))
colnames(df) = c("year","type","service_type")
我需要获取以下数据帧df2
:
year type num_serviced num_notserviced num_total
2012 AAA 2 0 2
...
因此,我需要按type
和year
对数据进行分组,然后计算Not-serviced
和所有其他项的频率,例如X
、Y
等(假定为已服务)。
这是我计算总计的代码:
temp = aggregate(df,
list(type = dat_human_errors$type,
year = dat_human_errors$year),
FUN = function(x){NROW(x)})
但是如何创建num_serviced
和num_notserviced
呢?应该有一些 IF-THEN 规则,例如 if type=="Not-serviced"num_notserviced++ else num_serviced++
。
最佳答案
我们可以尝试使用data.table
。将'data.frame'转换为'data.table'(setDT(df)
),按'year','type'分组,得到逻辑向量的sum
, 最后求和。
library(data.table)
setDT(df)[, .(num_serviced = sum(service_type != "Not-serviced"),
num_notserviced = sum(service_type =="Not_serviced")),
.(year, type)][, Total := num_serviced + num_notserviced][]
关于r - 如何计算聚合数据并创建不同的计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40172480/