我是R的新手,并根据StackOverflow上的其他有用建议将下面的语法拼凑在一起。我试图总结名为" COMBINED HOURS"并获得一个名为DOC_LINE_NUM的列的COUNT,该列按DOC_NUM列分组。
因此,对于每个DOC_NUM,计算总和COMBINED_HOURS,并显示COUNT个DOC_LINE_NUM。
下面的语法可以很好地获得COMBINED_HOURS的列总和,但如何在DOC_LINE_NUM的语法中加入COUNT逻辑?
谢谢。
train2 <- ddply(train, c("WEEKNUM", "DOC_NUM", "DOC_LINE_NUM", "SHORT_DATE","CUST_CODE", "OP_CODE", "JOB_TP_CODE"), function(x) colSums(x[c("COMBINED_HOURS")]))
# Sample data
WEEKNUM DOC_NUM DOC_LINE_NUM SHORT_DATE CUST_CODE OP_CODE JOB_TP_CODE COMBINED_HOURS
40 227555 1 2015-10-02 DOTSUG NDONA PU 0.0269448
40 227555 3 2015-10-02 DOTSUG NDONA PU 0.4183320
答案 0 :(得分:1)
使用老派plyr
,您应该可以
ddply(train, .variables = "DOC_NUM", summarize,
n_doc_line_num = length(unique(DOC_LINE_NUM)),
sum_comb_hours = sum(COMBINED_HOURS))
ddply
函数已被新的dplyr
包替换。使用dplyr
,这将写成:
library(dplyr)
train %>% group_by(DOC_NUM) %>%
summarize(n_doc_line_num = n_distinct(DOC_LINE_NUM),
sum_comb_hours = sum(COMBINED_HOURS))
我假设通过“名为DOC_LINE_NUM的列的COUNT”表示不同值的计数。
如果您共享大量样本数据(最好是dput
,请说dput(droplevels(head(train, 10)))
我很乐意进行测试,以确保事情看起来不错。
在dplyr
和plyr::ddply
中,summarize
都会删除不是分组变量的列。如果您希望保留其余列(并且它们对于DOC_NUM的每个值都具有相同值),则可以将它们添加到分组中以保留它们。 (“分组”是指dplyr::group_by
或.variables
的{{1}}参数。)
答案 1 :(得分:1)
使用data.table
的选项。我们汇聚了“data.frame&#39;到&#39; data.table&#39; (setDT(train)
),按&#39; DOC_NUM&#39;分组,得到length
的{{1}}元素&#39; DOC_LINE_NUM&#39; (data.table包装器为unique
)和uniqueN
&#39; COMBINED_HOURS&#39;。
sum