【问题标题】:Match one column of a data.frame with all the columns in another data.frame将 data.frame 的一列与另一个 data.frame 中的所有列匹配
【发布时间】:2013-12-19 10:46:37
【问题描述】:

我有两个data.frames:

 DF1   
 Col1      Col2      ......      ......   Col2000 
  A         H     
  c         d
  d         e  
  n         b   
  e         A    
  b         n    
  H         c    

 DF2    
  A
  b        
  c       
  d      
  e        
  n     
  H

我只需要将 DF2 中唯一的一列与 DF1 中的每一列相匹配。我需要匹配它们,因为我需要确切地知道匹配的排名。无论如何,我尝试编写一个函数,但由于我不是 R 专家,所以我的代码出了点问题:

  lapply(DF1, function(x) match(DF1[,i], DF2[,1]))      

【问题讨论】:

  • sapply( DF1 , function(x) sum( x == DF2[,1] ) )
  • @SimonO101 这不会返回排名。
  • @JorisMeys 充其量这个问题的措辞不清楚。如果是我认为的(即匹配最多的列排在第一位),那么将前者包装在rank() 中就足够了。
  • @SimonO101 match() 给出了排名,他只是使用 function() 错误。
  • @JorisMeys 好的,我对排名的理解不同。我想我接近它时没有意识到DF2[,1] 中的值顺序代表排名。

标签: r dataframe match


【解决方案1】:

要获得正确的结果,您需要正确的命令:

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

正在做你想做的事。采取:

DF1 <- data.frame(
  Col1 = c('A','c','d','n','e','b','H'),
  Col2 = c('H','d','e','b','A','n','c')
  )
DF2 <- data.frame(c('A','b','c','d','e','n','H'))

然后:

> lapply(DF1, function(x) match(x, DF2[,1]))  
$Col1
[1] 1 3 4 6 5 2 7

$Col2
[1] 7 4 5 2 1 6 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    相关资源
    最近更新 更多