使用与“match”函数等效的函数检索多个值

Retrieve several values using an equivalent to the 'match' function

提问人:Carpa 提问时间:6/12/2023 最后编辑:Thomas L.Carpa 更新时间:6/12/2023 访问量:38

问:

我有两个数据帧:

df1 <- data.frame(c('j','g','e'), c(5,8,3))
colnames(df1) <- c('person', 'number')

df2 <- data.frame(c('p','j','w','e','j','e','j'), c('a','b','c','f','l','m','n'))
colnames(df2)<-c('person','other')

我想根据 和 之间的匹配来检索值。我使用了以下代码:df2$'other'df1$'person'df2$'person'

result <- df2[match(df1$person, df2$'person'), 'other']

但我只从第一场比赛中获得值。

如果可能的话,在“base R”中,有什么简单的方法可以获得所有匹配项吗?在本例中,三个值来自 ,两个值来自 。我正在研究大数据帧,所以我正在寻找一种经济且快速的解决方案。 当我使用它时,我得到了以下所有条目:'j''e''j'

df2$'person'=='j'
R 数据帧 匹配

评论


答:

3赞 GKi 6/12/2023 #1

匹配将只给出第一个匹配。
在您的情况下,将给出所需的结果。
merge

merge(df1, df2)
#  person number other
#1      e      3     f
#2      e      3     m
#3      j      5     b
#4      j      5     l
#5      j      5     n

评论

0赞 Carpa 6/12/2023
但是,如果列具有不同的名称,我该怎么办?
1赞 GKi 6/12/2023
你可以用 、(第一个 data.frame 的列名)和 .byby.xby.y
2赞 zx8754 6/12/2023 #2

用:%in%

df2[ df2$person %in% df1$person, ]
# or without column names, compare 1st columns
# df2[ df2[[1]] %in% df1[[1]], ]

#   person other
# 2      j     b
# 4      e     f
# 5      j     l
# 6      e     m
# 7      j     n