我正在尝试在mutate()
. 假设我们从一个df1
看起来像这样的数据框开始,由它下面的代码生成:
ID Status
1 1 N
2 2 Y
3 3 Y
4 4 N
5 5 Y
df1 <- data.frame(
ID = c(1,2,3,4,5),
Status = c("N","Y","Y","N","Y")
)
我使用 dplyr 的mutate()
函数根据最右边的“状态”列的值生成一个新列。下面是新的tmp
数据帧输出和生成它的 dplyr 代码(这是一个超级简单的例子,适用于我的更大问题 - 就这样吧):
ID Status Flag
1 1 N No
2 2 Y Yes
3 3 Y Yes
4 4 N No
5 5 Y Yes
tmp <-
df1 %>%
mutate("Flag"=case_when(Status=="Y"~"Yes",TRUE~"No"))
我试图在上面嵌入等效的“匹配”函数,mutate()
以便插入到标志列中的值取决于与df1
这两个附加数据帧中的 ID 匹配的数据帧中的 ID:
Status1 <- data.frame(ID = c(2,3))
Status2 <- data.frame(ID = c(5))
例如,使用 ID 匹配函数,我的tmp
输出将如下所示:
ID Status Flag [Flag explained]
1 1 N No
2 2 Y Yes - Status1 Since the ID in the df1 data frame matches one of the ID's in the Status 1 data frame
3 3 Y Yes - Status1 Same as immediately above
4 4 N No
5 5 Y Yes - Status2 Since the ID in the df1 data frame matches the ID in the Status 2 data frame
在 dplyr 中以这种方式匹配多个数据帧的任何想法?
在我正在使用的实际数据中,有 5 个数据帧要匹配,而不是像本例中的 2 个。此外,在我实际的 5 个匹配表中,所有 ID 都是互斥的(匹配表中没有重复 ID)。在我的实际数据中,Status 和 Flag 列的等价物也是字符串,而不是数值。