R 如何对数据帧中的行进行分组,同时对一列中的出现次数进行计数,并对另一列中的值进行求和?

R 如何对数据帧中的行进行分组,同时对一列中的出现次数进行计数,并对另一列中的值进行求和?,r,plyr,R,Plyr,我正在尝试修改我的数据框: start end duration_time 1 1 2 2.438 2 2 1 3.901 3 1 2 18.037 4 2 3 85.861 5 3 4 83.922 并创建如下内容: start end duration_time weight 1 1 2 20.475 2 2

我正在尝试修改我的数据框:

  start end duration_time
1     1   2         2.438
2     2   1         3.901
3     1   2        18.037
4     2   3        85.861
5     3   4        83.922
并创建如下内容:

  start end duration_time weight
1     1   2        20.475      2
2     2   1         3.901      1
4     2   3        85.861      1
5     3   4        83.922      1
因此,重复的开始-结束组合将被删除,重量将增加,持续时间将总和

我已经有一个部件在工作了,我就是无法让重量工作:

library('plyr')

df <- read.table(header = TRUE, text = "start end duration_time
1     1   2         2.438
2     2   1         3.901
3     1   2        18.037
4     2   3        85.861
5     3   4        83.922")

ddply(df, c("start","end"), summarise, weight=? ,duration_time=sum(duration_time))
library('plyr')

df使用data.table的最简单解决方案:

library(data.table)
setDT(df)[, .(duration_time=sum(duration_time), wt = .N) , by  =c("start", "end")]

   start end duration_time wt
1:     1   2        20.475  2
2:     2   1         3.901  1
3:     2   3        85.861  1
4:     3   4        83.922  1

尝试使用dplyr,tidyr

library(dplyr)
library(tidyr)
df1 <- df %>% unite(by_var, start,end)
df2 <- cbind(df1 %>% count(by_var), df1 %>% group_by(by_var)%>% 
    summarise( duration_time=sum(duration_time))%>%
    separate(by_var, c("start","end")))[c(3,4,5,2)]

> df2
  start end duration_time n
1     1   2        20.475 2
2     2   1         3.901 1
3     2   3        85.861 1
4     3   4        83.922 1
库(dplyr)
图书馆(tidyr)
df1%单位(按变量、开始、结束)
df2%计数(按变量),df1%>%分组(按变量)%>%
总结(持续时间=总和(持续时间))%>%
独立的(由变量c(“开始”、“结束”))[c(3,4,5,2)]
>df2
开始-结束持续时间\u时间n
1     1   2        20.475 2
2     2   1         3.901 1
3     2   3        85.861 1
4     3   4        83.922 1

A
base R
选项为
aggregate

do.call(data.frame, aggregate(duration_time~., df1,
       FUN = function(x) c(duration_time=sum(x), weight = length(x))))

“体重会增加”是什么意思?这是您的计数变量吗?您所需要的所有尝试都是
ddply(df,.(开始,结束),summary,weight=length(duration\u time),duration\u time=sum(duration\u time))
如果您要使用dplyr,为什么不使用
df%>%group\u by(开始,结束)%>%summary(weight=n(),duration\u time=sum(duration\u time))
@rawr:这正是我想要的——把它作为其他人的答案。@ayshelina它回答了你的问题吗?请注意下面这一点谢谢,你认为这比数据表解决方案慢吗?@ayshelina一般来说,
aggregate
会慢一些,但对于较小的数据集,这会起到作用