R - Как добавить 2 разных дим таблицы по группам - PullRequest
2 голосов
/ 09 апреля 2020

У меня есть два фрейма данных, подобных этим:

Group   V1     V2
a       a1     a2
a       a3     a4
b       b1     b2
b       b3     b4
b       b5     b6

и

Group   V1     V2
a       a5     a6
b       b7     b8

Я хочу получить df, например:

Group   V1        V2
a       a1+a5     a2+a6
a       a3+a5     a4+a6
b       b1+b7     b2+b8
b       b3+b7     b4+b8
b       b5+b7     b6+b8

Можете ли вы подскажите пожалуйста как это сделать в R? Спасибо!

1 Ответ

1 голос
/ 09 апреля 2020

Предполагая, что a1, a2, b1, b2 являются числами, и вы хотите добавить их в окончательный кадр данных, вы можете объединить df1 и df2 с помощью Group и добавить соответствующие значения ,

Это можно сделать в базе R:

transform(merge(df1, df2, by = 'Group'), V1 = V1.x + V1.y, 
                V2 = V2.x + V2.y)[names(df1)]

#  Group V1 V2
#1     a  6  8
#2     a  8 10
#3     b  8 10
#4     b 10 12
#5     b 12 14

Или в dplyr:

library(dplyr)

inner_join(df1, df2, by = 'Group') %>%
   mutate(V1 = V1.x + V1.y, V2 = V2.x + V2.y) %>%
   select(names(df1))

data

Использовали эти фиктивные данные:

df1 <- structure(list(Group = structure(c(1L, 1L, 2L, 2L, 2L), .Label = c("a", 
"b"), class = "factor"), V1 = c(1L, 3L, 1L, 3L, 5L), V2 = c(2L, 
4L, 2L, 4L, 6L)), class = "data.frame", row.names = c(NA, -5L))

df2 <- structure(list(Group = structure(1:2, .Label = c("a", "b"), 
class = "factor"), V1 = c(5L, 7L), V2 = c(6L, 8L)), 
class = "data.frame", row.names = c(NA, -2L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...