0

我有这样的情况: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
    ...   ...      ....  ....

有什么建议吗?

谢谢

4

1 回答 1

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
于 2012-09-17T12:47:03.933 回答