ddply colSums和列数一起

时间:2015-10-31 01:17:42

标签: r plyr

我是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

2 个答案:

答案 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)))我很乐意进行测试,以确保事情看起来不错。

dplyrplyr::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