0

我处于这样的情况:

DF1:

  "G1"            "G2"  
  SEP11          ABCC1      
  214223_at      ADAM19     
  COPS4          BIK 
  ACE            ALG3
  EMP3           GGH

DF2

  "S1"            "S2"  
  SEP11          0.1858      
  ADAM19         0.131        
  COPS4          0.1143 
  ACE            0.119
  GGH            0.1214

我想要以下输出:

  "G1"            "S2"        "G2"           "S2"
  SEP11          0.1858      ADAM19         0.131         
  COPS4          0.1143      GGH            0.1214
  ACE            0.119

对于 DF1 的第一列,我尝试了以下代码:

  DF1 = read.delim("...", header = T)   
  DF2 = read.delim("...", header = T)      
  INT = intersect(DF1$G1, DF2$S1)            
  dx = DF2$S1 %in% int            
  out = DF2[idx]    
  write.table(...)           

现在,我想对 DF1 的一列、DF1 的所有列应用简单代码的“逻辑”,而不是一一应用以获得所需的输出。如何做到这一点?还有另一种最简单的方法吗?提前非常感谢!

4

1 回答 1

1

此命令返回数据帧列表,每列一个DF1

lapply(DF1, function(x) DF2[na.omit(match(DF2[[1]], x)), ])


$G1
     S1     S2
1 SEP11 0.1858
3 COPS4 0.1143
4   ACE 0.1190

$G2
      S1     S2
2 ADAM19 0.1310
5    GGH 0.1214
于 2012-11-22T18:26:36.507 回答