2013-12-19 6 views
1

У меня есть два data.frames:Матч один столбец data.frame со всеми столбцами в другом data.frame

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]))  

Может кто-нибудь поможет мне правильно написать функцию мне нужно?

Заранее спасибо

Лучшие

F.

+1

'sapply (DF1, функция (х) сумму (х == df2 [, 1]))' –

+0

@ SimonO101 Это не возвращает ранжирование. –

+0

@JorisMeys в лучшем случае вопрос сформулирован неясно. Если это то, что я * думаю * это (то есть столбец с большинством совпадений занимает первое место), то обернуть первое в 'rank()' должно быть достаточно. –

ответ

2

Чтобы получить правильный результат, вам нужна правильная команда:

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 
+0

+1 для чтения ума. –

+0

Хе-хе, я называю это чтением кода ;-) –

+0

Большое спасибо Джорису. – Fuv8

Смежные вопросы