如何解决如何基于R中两个不同长度的数据帧匹配IDS创建新列
我有长度为100的df1
PID
123
234
T345
P456
567
我还有另一个长度为1000的df2
PID
123
234
567
T678
P768
....
如果df1
的状态为PID
或df2
的{{1}}与"1"
相匹配,我需要在"0"
中创建新列
预期输出:
PID V1
123 1
234 1
T345 0
P456 0
567 1
我尝试了ifelse条件,但是由于长度不均匀而发生了错误。
预先感谢
解决方法
我建议使用base R
并使用match()
的{{1}}方法:
ifelse
现在,使用值之间的匹配,然后将其格式化为0或1:
#Data
df1 <- structure(list(PID = c("123","234","T345","P456","567")),class = "data.frame",row.names = 2:6)
df2 <- structure(list(PID = c("123","567","T678","P768")),row.names = 2:6,class = "data.frame")
输出:
#Match
df1$NewVar <- df2[match(df1$PID,df2$PID),'PID']
df1$NewVar <- ifelse(is.na(df1$NewVar),1)
,
您可以像下面一样尝试%in%
df1$V1 <- +(df1$PID %in% df2$PID)
给出
> df1
PID V1
1 123 1
2 234 1
3 T345 0
4 P456 0
5 567 1
数据
> dput(df1)
structure(list(PID = c("123","567"),V1 = c(1L,1L,0L,1L)),row.names = c(NA,5L),class = "data.frame")
> dput(df2)
structure(list(PID = c("123",class = "data.frame")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。