【发布时间】:2026-01-11 21:40:01
【问题描述】:
我有两个数据框df_a,df_b。
set.seed(143)
df_a <- data.frame(colA = sample(1:10, 10, replace=T), colB = sample(LETTERS[1:20],10))
df_a
# colA colB
#1 10 I
#2 1 D
#3 8 R
#4 5 F
#5 1 N
#6 10 P
#7 7 E
#8 6 S
#9 6 T
#10 4 C
df_b <- data.frame(colA = sample(1:10, 10, replace=T))
df_b
# colA
#1 9
#2 3
#3 9
#4 9
#5 3
#6 10
#7 10
#8 7
#9 4
#10 7
我必须根据两个数据帧中colA 的匹配,使用数据帧df_a 中的colB 中的值更新colB。
df_a[match(df_b$colA, df_a$colA),'colB']
# [1] <NA> <NA> <NA> <NA> <NA> I I E C E
#Levels: C D E F I N P R S T
输出不提供超过一个匹配的元素(不足为奇!)。例如,10 有两个值 I,P 但只给出 I。
Expected Output(something like this, maybe?):
df_a[match(df_b$colA, df_a$colA),'colB']
# [1] <NA> <NA> <NA> <NA> <NA> I,P I,P E C E
#Levels: C D E F I N P R S T
由于match() 函数只返回第一个匹配的值,是否有任何其他替代方法,如which() 或%in% 来完成任务?
【问题讨论】:
-
我会用
merge(df_b, df_a, by = "colA", all.x = TRUE),但是colA == 10怎么办? -
@m-dz 需要检索所有可能的匹配项
-
那么,我评论中的代码是否符合您的预期?
-
@m-dz 是和否。我正在寻找可以嵌入为带有分隔符的单个值的解决方案。