这是我的数据片段
Aaron Brook 450 36 25 .124 .530
Arron Afflalo 980 25 40 .128 .597
Arron Afflalo 236 25 94 .223 .621
我试图合并Arron Afflalo行,但同时添加列1-3,但取列4-5的平均值。
因此,最终的数据输出如下所示
Arron Afflalo 1216 50 134 .176 .609
有什么快速的方法可以做到这一点。如果没有,有没有办法删除所有重复的行?
发布于 2018-12-08 05:38:45
使用dplyr:
library(dplyr)
df <- data.frame(name = c("Aaron Brook", "Arron Afflalo", "Arron Afflalo"),
x = c(450, 980, 236), y = c(36, 25, 25),
a = c(.124, .128, .223), b = c(.530, .597, .621))
df %>%
filter(name == "Arron Afflalo") %>%
group_by(name) %>%
summarize(sum_x = sum(x), sum_y = sum(y), mean_a = mean(a), mean_b = mean(b))
如果您不知道列的名称和它们的顺序,也可以将最后一行替换为:
summarize(sum_x = sum(.[[2]]), sum_y = sum(.[[3]]), mean_a = mean(.[[4]]), mean_b = mean(.[[5]]))
发布于 2018-12-08 05:51:30
如果需要所有姓名和姓氏的摘要,请使用tidyverse
:
df %>%
group_by(V1, V2) %>%
mutate_at(3:5, funs(sum(.))) %>%
mutate_at(6:7, funs(mean(.))) %>%
summarise_all(funs(first(.)))
V1 V2 V3 V4 V5 V6 V7
<fct> <fct> <int> <int> <int> <dbl> <dbl>
1 Aaron Brook 450 36 25 0.124 0.530
2 Arron Afflalo 1216 50 134 0.176 0.609
或者,如果您只想要该特定名称的摘要:
df %>%
filter(V1 == "Arron" & V2 == "Afflalo") %>%
mutate_at(3:5, funs(sum(.))) %>%
mutate_at(6:7, funs(mean(.))) %>%
summarise_all(funs(first(.)))
V1 V2 V3 V4 V5 V6 V7
1 Arron Afflalo 1216 50 134 0.1755 0.609
数据:
df <- read.table(text = "Aaron Brook 450 36 25 .124 .530
Arron Afflalo 980 25 40 .128 .597
Arron Afflalo 236 25 94 .223 .621")
https://stackoverflow.com/questions/53677027
复制相似问题