есть ли функция R для свертывания дублированных строк при объединении уникальных столбцов в этих дублированных строках? - PullRequest
0 голосов
/ 21 мая 2019

Я хочу свернуть дублирующиеся строки по уникальному идентификатору записи, чтобы объединить уникальные переменные, которые существуют в этих дублированных строках. Некоторые переменные перечислены только в одной версии дублирующейся строки, в то время как другие уникальные переменные существуют в другой строке дублированной записи. Я работаю в R. Я хотел бы, чтобы записи существовали в одной строке, не теряя ни одного уникального столбца. Одна строка «общая-общая», которая собирает каждый из столбцов, которые могли быть заполнены в разных строках, так что эта последняя строка не является дубликатом, и показывает каждую переменную, которая могла быть заполнена все вместе ...

Я рассмотрел слияние и связывание и подумал о написании правила If, но дублирование зависит от записи (см. Пример) ..

record  Var1  var2  var3  var4  var5
2     1     1    NA    NA    NA
2    NA    NA     1     1     1
3     2     2    NA    NA    NA
3    NA    NA     2    NA    NA
3    NA    NA    NA     2     2
4     1     1    NA    NA    NA
5    NA    NA     1     1     1
5    NA     2    NA    NA    NA

желаемый пример вывода записи 2:

record  Var1  var2  var3  var4  var5
2     1     1    1    1    1
3 .... 

1 Ответ

0 голосов
/ 21 мая 2019

С базовыми R aggregate:

aggregate(df[2:ncol(df)], by = df["record"], sum, na.rm = T)

#### OUTPUT ####

  record Var1 var2 var3 var4 var5
1      2    1    1    1    1    1
2      3    2    2    2    2    2
3      4    1    1    0    0    0
4      5    0    2    1    1    1

С dplyr:

library(dplyr)

df %>% group_by(record) %>% summarize_all(sum, na.rm = T)


#### OUTPUT ####
# A tibble: 4 x 6
  record  Var1  var2  var3  var4  var5
   <int> <int> <int> <int> <int> <int>
1      2     1     1     1     1     1
2      3     2     2     2     2     2
3      4     1     1     0     0     0
4      5     0     2     1     1     1

Единственное, что NA s превращаются в 0.Но их легко вернуть обратно.

...