2012-04-11 20 views
2

我有兩個data.frame對象「x」和「ANS1」等於列,有500列在「X」和「ANS1」 7我怎樣才能找到「x列的名稱',這等於'ans1'的列嗎?查找data.frames

回答

1

隨着%in%

names(x) %in% names(ans1) 

更多細節見?match

+1

謝謝,我犯了這樣的這(在%ANS1 X%) – 2012-04-11 13:04:06

+0

您可以使用相交(這是一個WR在比賽衝擊片雷管) – 2012-04-11 13:20:22

+0

@大衛,不幸的是,你的這種解決方案的修改不會考慮在列中的值的奧德。如果訂單很重要,請重新考慮使用此解決方案。 – BenBarnes 2012-04-11 13:21:53

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 

這表明在data.frame xbb數據等於數據在cc列data.frame ans1

爲了獲得僅相匹配,

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

再次,從xbb列中的數據在ans1

1

這個怎麼樣都等同於cc列中的數據:

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"