r - 根据 R 中另一个数据帧中的条件值匹配/子集一个数据帧
问题描述
我有两个数据框:
df1=data.frame(A=c(1,2,4,8), B=c(4,3,2,9), C=c(10,11,1,2), D=c(12,40,3,4))
df2=data.frame(A=c(0.5,2.0,0.1,0.3), B=c(1.5,0.5,0.2,0.1), C=c(3.0,1.25,0.5,0.2), D=c(0.7,0.8,0.2,2.0))
我想在 df1 中为所有列保留 <= 0.8 的值,在NA
> 0.8 的列中保留 s
我试图在 df2 中查找和替换 > 0.8 的值:
df2[df2 >= 0.8] <- NA
然后我尝试将 df1 中的所有匹配值替换为NA
df2 中的值,但类似于下面的脚本需要列而不是数据框:
df1[match(df1, df2==NA)]
我希望最终的数据框看起来像这样:
df3=data.frame(A=c(1,NA,4,8), B=c(NA,3,2,9), C=c(NA,NA,1,2), D=c(12,40,3,NA))
TIA
解决方案
像这样使用mapply
:
as.data.frame(mapply(function(x, y) ifelse(y <= 0.8, x, NA), df1, df2))
或者
replace(df1, df2 > 0.8, NA)
推荐阅读
- json - 如何使用 VBA 将 JSON 文件水平导入 MS excel
- json - 将数据添加到 terraform 中的 json 文件
- java - 使用 SavedStateHandle 时 UI 未更新
- c# - 如何随时使用“ESC”退出while循环/ C#
- javascript - Chrome 会自动格式化错误堆栈,这是如何工作的?
- migration - API Connect v5 到 v10 中的迁移过程
- javascript - QML - 如何从孩子调用重载函数
- c# - 运行宏以在另一个程序中打开文件窗口,需要保存文件时执行的 if 语句(c#)
- selenium - 无法使用硒找到元素(Htmlunitdriver)
- github - 如何使用 Github API 获取 Github 存储库指标(stargazers、issue 等)的历史统计信息?