给定具有缺失值的数据,插补是用一些值替换缺失值的过程。目标是忽略具有缺失值的行,用 NA 表示。这样的行可以被视为数据的一个组成部分,因此该过程称为item imputation。
输入
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 的公共列 ID 合并?
使用 SQLDF 合并具有公共 ID 且无 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