#r #data.table #subset
#r #data.table #подмножество
Вопрос:
У меня есть dataset1 с некоторыми пропущенными значениями в каждом из столбцов и dataset2 (те же измерения), но вмененные пропущенные значения.
Я хочу подмножить вмененные значения из dataset2, которые были NA в dataset1. У меня нет флага NA в моих исходных данных.
Я использую R Studio:
#Example
data.org <- as.data.frame( cbind(WT=c(NA,20,55,NA,25), HT= c(55,NA,NA,25,30), CBC=c(NA,10,20,NA,50) ) )
data.imp <- as.data.frame( cbind(WT=c(10,20,55,25,25), HT= c(55,30,55,25,30), CBC=c(15,10,20,40,50) ) )
#output
data.imp.WT <- as.data.frame(cbind(WT=c(10,25)))
data.imp.HT <- as.data.frame(cbind(HT=c(30,55)))
data.imp.CBC <- as.data.frame(cbind(CBC=c(15,40)))
Ответ №1:
Ниже приведены недостающие значения :
data.imp[is.na(data.org)]
#[1] 10 25 30 55 15 40
Чтобы иметь эти значения по столбцам, мы можем использовать Map
:
Map(function(x, y) y[is.na(x)], data.org, data.imp)
#$WT
#[1] 10 25
#$HT
#[1] 30 55
#$CBC
#[1] 15 40
Комментарии:
1. Мне нужно ввести структуру фрейма данных для каждой переменной
2. Если вы поместите выходные данные из приведенного выше
data
, вы можете использоватьstack(data)
для получения выходных данных в одном фрейме данных или,list2env(data, .GlobalEnv)
если хотите, в отдельных фреймах данных.3. Я хочу, чтобы они были в одном фрейме данных. Стек (данные) работал для этого примера, но я получил следующую ошибку, когда применил ее к своим фактическим данным, с которыми я работаю:
in stack.default(Map(function(x, y) y[is.na(x)], data.org, data.imp): non-vector elements will be ignored
и получил 0 для 2 переменных4. Это
Map(function(x, y) y[is.na(x)], data.org, data.imp)
работало нормально, но не внутри стека5. есть идеи, почему?