Добавить вместе 2 кадра данных в R без потери столбцов

Документация Google Диска содержит ответы, которые вы после:

https://developers.google.com/drive/v2/reference/files/insert

1
задан Digvijay Sawant 16 January 2019 в 22:08
поделиться

4 ответа

Вы можете попробовать:

library(tidyverse)

list(df2, df1) %>%
  map(rownames_to_column) %>%
  bind_rows %>%
  group_by(rowname) %>%
  summarise_all(sum, na.rm = TRUE)

# A tibble: 2 x 5
  rowname     A     B     C     D
  <chr>   <int> <int> <int> <int>
1 1           2     1     2     1
2 2           4     2     4     2
0
ответ дан H 1 16 January 2019 в 22:08
поделиться
allnames <- sort(unique(c(names(df1), names(df2))))

df3 <- data.frame(matrix(0, nrow = nrow(df1), ncol = length(allnames)))
names(df3) <- allnames

df3[,allnames %in% names(df1)] <- df3[,allnames %in% names(df1)] + df1
df3[,allnames %in% names(df2)] <- df3[,allnames %in% names(df2)] + df2

df3
  A B C D
1 2 1 2 1
2 4 2 4 2
0
ответ дан Adam 16 January 2019 в 22:08
поделиться

Вот забавный базовый метод R с Reduce.

Reduce(cbind,
       list(Reduce("+", list(df1[intersect(names(df1), names(df2))],
                             df2[intersect(names(df1), names(df2))])), # sum results
                             df1[setdiff(names(df1), names(df2))], # in df1, not df2
                             df2[setdiff(names(df2), names(df1))])) # in df2, not df1

Возвращает

  A C D B
1 2 2 1 1
2 4 4 2 2

Предполагается, что оба столбца df1 и df2 имеют столбцы, которых нет в другом. Если это не так, вам придется скорректировать список.

Обратите внимание, что вы можете заменить Reduce на do.call в обоих местах, и вы получите тот же результат.

0
ответ дан lmo 16 January 2019 в 22:08
поделиться

Используя left_join() из dplyr, вы не потеряете столбец

library(tidyverse)

dat1 <- tibble(a = 1:10,
               b = 1:10,
               c = 1:10)

dat2 <- tibble(c = 1:10,
               d = 1:10, 
               e = 1:10)

left_join(dat1, dat2, by = "c")
#> # A tibble: 10 x 5
#>        a     b     c     d     e
#>    <int> <int> <int> <int> <int>
#>  1     1     1     1     1     1
#>  2     2     2     2     2     2
#>  3     3     3     3     3     3
#>  4     4     4     4     4     4
#>  5     5     5     5     5     5
#>  6     6     6     6     6     6
#>  7     7     7     7     7     7
#>  8     8     8     8     8     8
#>  9     9     9     9     9     9
#> 10    10    10    10    10    10

Создан в 2019-01-16 пакетом представитель (v0 .2.1)

0
ответ дан dylanjm 16 January 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: