匹配和子集

时间:2012-09-17 12:23:38

标签: r

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

任何建议?

由于

1 个答案:

答案 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