在data.frames中找到相等的列

时间:2012-04-11 12:45:13

标签: r dataframe

我有两个data.frame对象'x'和'ans1','x'中有500列,'ans1'中有7列 如何从'x'中找到列的名称,它们等于'ans1'中的列?

3 个答案:

答案 0 :(得分: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 bb中的列x中的数据等于data.frame cc中列ans1中的数据。

仅获取比赛,

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

同样,bbx中的数据与cc

ans1列中的数据相同

答案 1 :(得分:1)

使用%in%

names(x) %in% names(ans1)

有关详细信息,请参阅?match

答案 2 :(得分: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"