【发布时间】:2019-11-19 19:17:06
【问题描述】:
我有两个要匹配的数据框,然后让它根据这个匹配返回一个值。
dt1
Name
Matt
John
Steven
Natalie, Nat
Unknown
dt2
Names Grade
Matt A
John B
Steven C
Natalie D
Nat D
Unknown NA
我想要 R 做的是将 dt1 与 dt2 匹配,然后返回一个值。我用过这段代码:
Merge_df$"Match_name" <- ifelse(df1$"Name" %in% df2$"Names","Right Name",ifelse(grepl ("Unknown", dt1$"Name", ignore.case = FALSE), "Unknown", "NA"))
期望的输出
Merge_df
A
B
C
D
E
Unknown
但是我得到的不是这个。在其中有两个名称的单元格中,它返回 NA 因为它不读取两个名称,它只是尝试将整个值与 dt2 匹配,这当然没有任何值(Natalie,Nat 一起) .我希望 R 读取这两个名称并查看它是否都在 dt2 中,然后返回文本值“正确的名称”。
有什么想法吗?
【问题讨论】:
-
通过使用模糊匹配,您有可能返回比任一框架拥有的更多的行,这是故意的吗?
-
感谢 R2evans。不,这不是我的本意。我上面的代码是这样做的吗?对不起,我应该说我完全是一个新手(试图成为程序员的医生)。但是有没有办法做我上面问的?
-
好吧,我想我看错了。您打算如何处理多名称行?这是
all或any操作吗? (我这么说是因为Natalie, Nat不在dt2中,但您的输出表明它在。) -
这就是我遇到问题的地方...我不确定如何在一个单元格中处理多个名称。如何让 R 分别读取这两个名称并将其与 dt2 进行比较并确定它们是否在 dt2 中?当单元格中只有一个名称时,代码可以正常工作,但当单元格中有两个或更多名称时,代码会失败。
-
错字...我已经编辑过了...