2012-04-11 2 views

ответ

1

С %in%:

names(x) %in% names(ans1) 

См ?match более подробно.

+1

спасибо, я сделал так, что (x% in% ans1) –

+0

вы можете использовать intersect (который является wr apper по совпадению) –

+0

@ Давид, к сожалению, ваша модификация этого решения не учитывает другие значения в столбцах. Если заказ важен, пожалуйста, передумайте с помощью этого решения. – BenBarnes

2

можно было бы использовать identical() с digest пакета:

library(digest) 

x <- data.frame(aa = c("s", "d", "f"), bb = 1:3) 
ans1 <- data.frame(bb = c("d", "s", "z"), cc = 1:3) 

(myMatches<-lapply(x, function(myX) sapply(ans1, 
    function(y) identical(digest(y), digest(myX)))) 
) 

# $aa 
# bb cc 
# FALSE FALSE 

# $bb 
# bb cc 
# FALSE TRUE 

Это указывает, что данные в столбце bb в data.frame x равно данных в столбце cc в data.frame ans1.

Чтобы получить только спички,

unlist(lapply(myMatches, function(x) which(x))) 
# bb.cc 
# 2 

Опять же, данные в колонке bb от x идентичны данным в столбце cc в ans1

1

Как об этом:

mtcarsSub <- mtcars[c(1,4,7)] 
names(mtcarsSub) <- letters[1:3] 
matches <- sapply(mtcarsSub,function(x) sapply(mtcars,identical,x)) 
matches 
     a  b  c 
mpg TRUE FALSE FALSE 
cyl FALSE FALSE FALSE 
disp FALSE FALSE FALSE 
hp FALSE TRUE FALSE 
drat FALSE FALSE FALSE 
wt FALSE FALSE FALSE 
qsec FALSE FALSE TRUE 
vs FALSE FALSE FALSE 
am FALSE FALSE FALSE 
gear FALSE FALSE FALSE 
carb FALSE FALSE FALSE 

names(mtcars)[apply(matches,2,which)] 
[1] "mpg" "hp" "qsec" 
Смежные вопросы