我有两个data.frame对象'x'和'ans1','x'中有500列,'ans1'中有7列 如何从'x'中找到列的名称,它们等于'ans1'中的列?
答案 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
同样,bb
列x
中的数据与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"