有两个数据集,A& B,如下:
A <- data.frame(TICKER=c("00EY","00EY","00EY","00EY","00EY"),
CUSIP=c(NA,NA,"48205A10","48205A10","48205A10"),
OFTIC=c(NA,NA,"JUNO","JUNO","JUNO"),
CNAME=c(NA,NA, "JUNO", "JUNO","JUNO"),
ANNDATS=c("2015-01-13","2015-01-13","2015-01-13","2015-01-13","2015-01-13"),
ANALYS=c(00076659,00105887,00153117,00148921,00086659),
stringsAsFactors = F)
B <- data.frame(TICKER=c("00EY","00EY","00EY","00EY"),
CUSIP=c("48205A10","48205A10","48205A10","48205A10"),
OFTIC=c("JUNO","JUNO",NA,NA),
CNAME=c("JUNO","JUNO", NA, NA),
ANNDATS=c("2015-01-13","2015-01-13","2015-01-13","2015-01-13"),
ANALYS=c(00076659,00105887,00153117,00148921),
stringsAsFactors = F)
如何使用另一个数据框中的信息填充一个数据框中的缺失数据? (A&amp; B数据集的长度不同)。
答案 0 :(得分:0)
由于两个数据集可以有不同的长度,因此您需要一些可以连接的功能。看起来ANALYS
是某种标识符,我们可以用它来连接这个例子中的两个data.frames。
首先,我们识别df1
中的所有缺失(即A
)并获取其索引(行和列)。
然后,df1
中的缺失由df2
中与ANALYS
相同值对应的值中的值排除。如果此ID在df2中不可用,则将跳过该行。
f <- function(df1, df2){
missings <- sapply(df1, is.na)
missingsInd <- which(missings, arr.ind = T)
for(i in 1:nrow(missingsInd)){
idOfMissing <- df1$ANALYS[missingsInd[i,1]]
correspondingLine <- df2[which(df2$ANALYS == idOfMissing), ]
if (nrow(correspondingLine) != 0) {
df1[missingsInd[i,1], missingsInd[i,2]] <- correspondingLine[1,missingsInd[i,2]]
}
}
df1
}
f(A, B)
# TICKER CUSIP OFTIC CNAME ANNDATS ANALYS IRECCD
# 1 00EY 48205A10 JUNO JUNO 2015-01-13 76659 1
# 2 00EY 48205A10 JUNO JUNO 2015-01-13 105887 2
# 3 00EY 48205A10 JUNO JUNO 2015-01-13 153117 1
# 4 00EY 48205A10 JUNO JUNO 2015-01-13 148921 3
# 5 00EY 48205A10 JUNO JUNO 2015-01-13 86659 4
注意两个data.frames中NA
s的单元格将返回NA
,如输出中所示。此外,这仅适用于ANALYS仅在两个data.frames中保存唯一值的情况。