r - 比较不同数据帧的不同列和标志匹配
问题描述
我有两个数据框如下
df1<-
data.frame("name"=c("tom","bob","owen","john"),"last_name"=c("trump","obama"),"age"=c(24,28),"number"=c(1,2))
df2<-data.frame("name"=c("bob","owen","tom","marry"),"age"=c(28,26),"number"=c(3,1))
我想比较两个数据框之间的一些特定列,并在 df1 中创建一个状态列,如果它们匹配它应该标记匹配而不匹配它应该标记不匹配,如下所示:
df1 <- data.frame("name"=c("tom","bob","owen","john"),"last_name"=c("trump","obama"),"age"=c(24,28),"number"=c(1,2),"name_status"=c("matched","matched","matched","not matched"),"age_status"=c("notmatched","matched","not matched","matched"), "number_status"=c("matched","notmatched"))
```
I tried using which %in% but as number of match is less than number of rows it throws an error
Thank you for helping in advance
解决方案
你可以使用类似的东西:
df1$name_status = ifelse(df1$name %in% df2$name, 'matched', 'not matched')
对于多列:
as.data.frame(sapply(1:length(names(df2)), function(i) ifelse(df1[, names(df2)[i]] %in% df2[, i], 'matched', 'not matched'))) -> df3
colnames(df3) <- paste0(names(df2), '_status')
df1 <- cbind(df1, df3)
推荐阅读
- java - 父字段在第二个子 Activity 中返回 null,即使它已在第一个 Activity 中初始化
- raml - RAML 依赖的必需查询参数
- mongodb - Symfony 4 MongoDB ODM 一对一关系不起作用
- xamarin - 在 Xamarin 窗体 IOS 中使用 CrossMediaManager 播放 Mp3 文件时更改 DisplayImage
- arrays - printf 输出超出数组指定长度的字符
- chart.js - ChartJS 轴刻度回调函数中的条件不返回预期的标签
- android - 如何访问 DJI 移动端 UX SDK FPVWidget?
- python - 在 Matplotlib 中为文本添加没有轴刻度/标签的空子图作为子图
- ruby-on-rails - 如何迭代以查找表中是否存在任何记录
- three.js - 渲染时的 THREE.js 对角线。showdow.bias 有帮助,但“castShadow”没有帮助