Суммируйте строки на основе имен и создайте новый df - PullRequest
0 голосов
/ 13 марта 2020

Мне нужна помощь для личного проекта!

У меня есть df (Имя x Дата), похожее на это

       Name1 Name2 Name3 Name3 Name 4 Name5 Name6 Name 3
Date 1    x1    x2    x3    x4    x5     x6    x7     x8
Date 2    y1    y2    y3    y4    y5     y6    y7     y8
Date 3    z1    z2    z3    z4    z5     z6    z7     y8

et c ...

и я хочу преобразовать это как

       Name1 Name2   Name3  Name 4 Name5 Name6
Date 1    x1    x2 x3+x4+x8   x5    x6    x7
Date 2    y1    y2 y3+y4+y8   y5    y6    y7
Date 3    z1    z2 z3+z4+z8   z5    z6    z7

или создать новый df, похожий на этот. Есть ли что-нибудь легко сделать? Заранее спасибо!

1 Ответ

0 голосов
/ 13 марта 2020

Мы можем использовать split.default() для разделения столбцов с одинаковыми именами, а затем взять сумму этих столбцов, то есть

d1 <- cbind.data.frame(a = sample(5), b = sample(5), a = sample(5), c = sample(5), b = sample(5))
#  a b a c b
#1 1 1 3 5 1
#2 4 3 2 1 5
#3 3 2 5 2 2
#4 5 4 4 3 4
#5 2 5 1 4 3

#Sum columns with the same name
do.call(cbind.data.frame, lapply(split.default(d1, names(d1)), rowSums))
#  a b c
#1 4 2 5
#2 6 8 1
#3 8 4 2
#4 9 8 3
#5 3 8 4
...