r - 根据条件验证R中两个数据框之间的列中的值
问题描述
我有两个数据框。我必须匹配和之间的前两列nndf
,tndf
如果有匹配,我必须检查第三列中的值是否相同并更新第三个数据框。问题是nndf
长于tndf
。
nndf <- data.frame("var1" = c("ABC","ABC","DEF", "FED","DGS"), "var2" = c("xyz","abc","def","dsf","dsf"), "var3" = c(1234.21,3432.12,0.12,1232.44,873.00))
tndf <- data.frame("var1" = c("ABC","ABC","DEF"), "var2" = c("xyz","abc","def"), "var3" = c(1234.21,3432.12,0.11))
ndf <- data.frame("var1" = c("ABC","ABC"), "var2" = c("xyz","abc"))
我想在第三个数据框中填充结果。该数据框从前两列中获取公共值,nndf
并且tndf
无论它们是公共的,检查第三列是否相同1234.21
,3432.12
如果值相同,则返回 TRUE 并填充该列。所需的输出是
var1 var2 var3
ABC xyz TRUE (indicating 1234.21 and 1234.21 in first two df are same)
ABC abc TRUE
DEF def FALSE (indicating 0.12 is not equal to 0.11)
我尝试使用forloop + if condition
. 但是,它会多次遍历每一行并填充结果。
解决方案
我们可以做一个inner_join
然后比较两列中的值
library(dplyr)
inner_join(nndf, tndf, by = c("var1", "var2")) %>%
mutate(var3 = var3.x == var3.y) %>%
dplyr::select(var1, var2, var3)
# var1 var2 var3
#1 ABC xyz TRUE
#2 ABC abc TRUE
#3 DEF def FALSE
或类似地在基础 R
df1 <- merge(nndf, tndf, by = c("var1", "var2"))
df1$var3 <- df1$var3.x == df1$var3.y
推荐阅读
- java - Spring Controller 无法正确读取表单数据字符串 XML
- flutter - 在颤振中更改应用程序的起始飞镖文件
- c# - where 子句中的计算值
- python - 如何根据元组中的变量对元组列表进行排序
- python - Django:第 14 行的块标记无效:'endblock',预期为 'endfor'。您是否忘记注册或加载此标签?
- scala - akka-streams 上的消息数量
- ios - 一个 UICollectionView Xcode 中的两个单元格
- c# - 如何在 post 方法中反序列化 asp.net core api 中的 json 数组?
- google-apps-script - 如何为我的谷歌工作区域中的所有用户执行脚本?(我是管理员,已创建服务帐户)
- azure - 如何使用 azure-cli/powershell 从 Azure 应用服务下载/克隆源代码到本地计算机