提问人:Carpa 提问时间:6/12/2023 最后编辑:Thomas L.Carpa 更新时间:6/12/2023 访问量:38
使用与“match”函数等效的函数检索多个值
Retrieve several values using an equivalent to the 'match' function
问:
我有两个数据帧:
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'
答:
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 的列名)和 .by
by.x
by.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
评论