我遇到这样的情况: data.frame1(240列和可变行数):
COL1 COL2 COL3 a e h b f i c g l d
和data.frame2
Gene VAL a 3 b 7 c 0.5 d 3.7 e 9.08 f 1.3 ... ...
我想将第一个data.frame的每个COL与data.frame2(以及第二个data.frame的第一列)进行递归匹配和子集,以便得到以下输出:
出: data.frame3
COL1 VAL COL2 VAL a 3 e 9.08 b 7 f 1.3 ... ... .... ....
任何建议?
由于
答案 0 :(得分:1)
可以使用函数lapply
:
data.frame1 <- data.frame(COL1 = letters[1:3], COL2 = c(NA, letters[5], NA))
data.frame2 <- data.frame(Gene = letters[1:6], VAL = rnorm(6))
do.call("cbind",
lapply(data.frame1,
function(x) { VAL <- rep(NA, ncol(data.frame1));
VAL[!is.na(x)] <- data.frame2$VAL[data.frame2$Gene %in% na.omit(x)];
return(data.frame(x, VAL)) }))
# COL1.x COL1.VAL COL2.x COL2.VAL
#1 a 0.1601884 <NA> NA
#2 b -0.2035409 e -1.535597
#3 c -0.6661004 <NA> NA