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
Abase 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
会慢一些,但对于较小的数据集,这会起到作用