首页 > 解决方案 > 如何根据R中两个不同长度的数据帧匹配IDS创建新列

问题描述

我有长度为 100 的 df1 看起来像

PID
123
234
T345
P456
567

我还有另一个长度为 1000 的 df2 看起来一样

PID
123
234
567
T678
P768
....

df1如果它PIDdf2状态匹配"1",我需要创建新列"0"

预期输出:

PID    V1
123     1
234     1
T345    0
P456    0
567     1

我尝试了 ifelse 条件,但由于长度不均匀而发生错误。

提前致谢

标签: rdplyrtidyverse

解决方案


我会建议一种base R方法match()和使用ifelse

#Data
df1 <- structure(list(PID = c("123", "234", "T345", "P456", "567")), class = "data.frame", row.names = 2:6)
df2 <- structure(list(PID = c("123", "234", "567", "T678", "P768")), row.names = 2:6, class = "data.frame")

现在代码使用值之间的匹配,然后格式化为 0 或 1:

#Match
df1$NewVar <- df2[match(df1$PID,df2$PID),'PID']
df1$NewVar <- ifelse(is.na(df1$NewVar),0,1)

输出:

   PID NewVar
1  123      1
2  234      1
3 T345      0
4 P456      0
5  567      1

推荐阅读