2

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

4

3 回答 3

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

这表明bbdata.frame中列中x的数据等于 data.frame 中列cc中的数据ans1

仅获取匹配项,

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

同样,bbfrom列中的数据与 in 列中x的数据相同ccans1

于 2012-04-11T13:15:03.693 回答
1

%in%

names(x) %in% names(ans1)

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

于 2012-04-11T12:52:17.797 回答
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"
于 2012-04-11T13:16:55.563 回答