Учитывая данные с пропущенными значениями, вменение — это процесс, в котором пропущенные значения заменяются некоторыми значениями. Цель состоит в том, чтобы игнорировать строки с отсутствующими значениями, обозначенными NA. Такую строку можно рассматривать как компонент данных, поэтому процесс называется вменение элемента.
Ввод
df1 <- data.frame(ID=c(1,2,5,6),V1=c(7,77,777,NA))
df2 <- data.frame(ID=c(1,3,5,6),V2=c(6,66,666,6666))
df3 <- data.frame(ID=c(1,3,5,6),V3=c(9,NA,999,9999))
или, альтернативно, в формате CSV, где значения пропусков отмечены NA
data.csv data2.csv data3.csv
ID V1 ID V2 ID V3
1 7 1 6 1 9
2 77 2 NA 2 NA
3 NA 3 66 3 NA
4 NA 4 NA 4 NA
5 777 5 666 5 999
6 NA 6 6666 6 9999
Вывод
Ожидаемый результат
ID V1 V2 V3
1 7 6 9
5 777 666 999
где мы хотели просто строки без какого-либо значения NA.
Как объединить входные данные со столбцами V1, V2, V3 и общим идентификатором столбца без NA в строке?
Пример решения с SQLDF для объединения столбцов с общим идентификатором и без NA
library(sqldf)
# Read in the data: with CSV, you can use read.csv or fread from data.table
df1 <- data.frame(ID=c(1,2,5,6),V1=c(7,77,777,NA))
df2 <- data.frame(ID=c(1,3,5,6),V2=c(6,66,666,6666))
df3 <- data.frame(ID=c(1,3,5,6),V3=c(9,NA,999,9999))
#
sqldf("SELECT a.ID, a.V1, b.V2, c.V3 FROM df1 a, df2 b, df3 c WHERE a.ID=b.ID AND b.ID=c.ID AND V1!='NA'")
в результате
ID V1 V2 V3
1 1 7 6 9
2 5 777 666 999
ID == 1
? Должны ли6
и3
быть в ожидаемом результате, но сNA
, где данные отсутствуют? Код — это здорово, но не ждите, что мы расшифруем смысл вашего вопроса только по нему! - person Gavin Simpson   schedule 10.08.2011