r - 如何根据R中两个不同长度的数据帧匹配IDS创建新列
问题描述
我有长度为 100 的 df1 看起来像
PID
123
234
T345
P456
567
我还有另一个长度为 1000 的 df2 看起来一样
PID
123
234
567
T678
P768
....
df1
如果它PID
与df2
状态匹配"1"
,我需要创建新列"0"
预期输出:
PID V1
123 1
234 1
T345 0
P456 0
567 1
我尝试了 ifelse 条件,但由于长度不均匀而发生错误。
提前致谢
解决方案
我会建议一种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
推荐阅读
- typo3 - TYPO3 tx_news dateMenu - 只有年份 - 没有月份
- javascript - 如何在express.js中按父ID嵌套单独的文档?
- python - Anaconda 提示启动失败:UnicodeEncodeError: 'utf-8' codec can't encode character '\udd8e': surrogates not allowed
- html - 如何为输入类型周设置最小和最大属性
- java - 即使我在执行 mediaplayer.reset 时,MediaPlayer setDatasource 也会出错
- typescript - Slonik:slonik 支持哪些数据类型以及如何转换它们?
- javascript - Node.JS 读取 json 文件不显示新文件更新
- c# - 如何让我的物体在它向上/向下悬浮后保持静止?
- r - 在 R 中使用 scale_fill_gradientn() 时更改图例的大小
- yarnpkg - Yarn 尝试从 https://registry.yarnpkg.com/ 获取选择性包而不是本地包