R data.table объединяет два столбца из одной таблицы - PullRequest
1 голос
/ 09 марта 2020

У меня есть:

inputDT <- data.table(COL1 = c(1, NA, NA), COL1 = c(NA, 2, NA), COL1 = c(NA, NA, 3))
inputDT
   COL1 COL1 COL1
1:    1   NA   NA
2:   NA    2   NA
3:   NA   NA    3

Я хочу

outputDT <- data.table(COL1 = c(1,2,3))
outputDT
   COL1
1:    1
2:    2
3:    3

По сути, у меня есть data.table с несколькими столбцами, имена которых совпадают (значения являются взаимоисключающими), и Мне нужно создать только один столбец, чтобы объединить их.

Как этого добиться?

Ответы [ 2 ]

7 голосов
/ 09 марта 2020

ОП запрашивает решение data.table. Начиная с версии v1.12.4 (03 октября 2019 г.) доступна функция fcoalesce():

library(data.table)
inputDT[, .(COL1 = fcoalesce(.SD))]
   COL1
1:    1
2:    2
3:    3
1 голос
/ 09 марта 2020

В качестве альтернативы (менее элегантно, чем ответ @ Уве), если у вас есть только цифры и NA, вы можете вычислить максимум каждой строки при удалении NA:

library(data.table)
inputDT[, .(COL2 = do.call(pmax, c(na.rm=TRUE, .SD)))]

  COL2
1:    1
2:    2
3:    3
...