将行添加到组内数据总和为的dataframe

将行添加到组内数据总和为的dataframe,r,group-by,summarization,R,Group By,Summarization,我在下面有一个数据帧示例 eg_data <- data.frame( time = c("1", "1", "2","2"), type = c("long", "short","long", "short"), size=c(200,50, 500, 150 )) 我希望最终数据帧的外观示例如下: eg_data <- data.frame( time = c("1", "1", "2","2", "1 + 2", "1 + 2"), type = c("long", "

我在下面有一个数据帧示例

eg_data <- data.frame(
time = c("1", "1", "2","2"), 
type = c("long", "short","long", "short"), 
size=c(200,50, 500, 150 ))
我希望最终数据帧的外观示例如下:

eg_data <- data.frame(
time = c("1", "1", "2","2", "1 + 2", "1 + 2"), 
type = c("long", "short","long", "short", "long", "short"), 
size=c(200, 50, 500, 150, 700, 200))
eg_数据
eg_数据%
按(类型)%>%对每种类型进行分组
总结(时间=粘贴(时间,折叠=“+”),#合并时间
大小=大小之和(大小))%>%#获取大小之和
绑定_行(如_数据),#在原始数据集(行)之后添加所有内容
#时间类型大小
#1长200
#2 1短50
#3.2长500
#4 2短150
#5 1+2长700
#6 1+2短200

安东尼奥斯克和雨果通过dplyr找到了很好的答案,我还使用[]和base R找到了这个答案

eg_data <- rbind(eg_data, data.frame(time="1 + 2", type="long", 
size=sum(eg_data[which(eg_data[,2]=="long"),3])))

eg_data <- rbind(eg_data, (data.frame(time="1 + 2", type="short", 
size=sum(eg_data[which(eg_data[,2]=="short"),3]))))

eg_data这一行正好满足了我的需要,但它没有将两个摘要行添加到数据帧中。但是它确实满足了我的需要,谢谢你的回答。你应该将这个过程的输出保存为
eg_data
,或者保存为一个新的数据帧。您可以在开始时添加
eg\u data=
,并具有类似
eg\u data=eg\u data%>%的内容……
eg_data <- data.frame(
  time = c("1", "1", "2","2"), 
  type = c("long", "short","long", "short"), 
  size=c(200,50, 500, 150 ))

library(dplyr)

eg_data %>%
  group_by(type) %>%                               # for each type
  summarise(time = paste(time, collapse = " + "),  # combine times
            size = sum(size)) %>%                  # get sum of sizes
  bind_rows(eg_data, .)                            # add everything after your original dataset (rows)

#    time  type size
# 1     1  long  200
# 2     1 short   50
# 3     2  long  500
# 4     2 short  150
# 5 1 + 2  long  700
# 6 1 + 2 short  200
eg_data <- rbind(eg_data, data.frame(time="1 + 2", type="long", 
size=sum(eg_data[which(eg_data[,2]=="long"),3])))

eg_data <- rbind(eg_data, (data.frame(time="1 + 2", type="short", 
size=sum(eg_data[which(eg_data[,2]=="short"),3]))))