匹配R中不同数据帧中两个列对的值

吉米DS

我有两个数据框,它们是边缘列表,其中前两列包含“源”和“目标”列,第二个数据框包括具有边缘属性的第三列。这两个数据帧的长度不同,我想(1)从一个数据帧中检索不在另一数据帧中的边缘,以及(2)从第二数据帧中获取值以匹配边缘。

例:

> A <- data.frame(source=c("v1", "v1", "v2", "v2"), target=c("v2", "v4", "v3", "v4"))
> B <- data.frame(source=c("V1", "V2", "v1", "V4", "V4", "V5"), target=c("V2", "V5", "V3", "V3", "V2", "V4"), variable=c(3,4,0,2,1,0))
> A
  source target
1     v1     v2
2     v1     v4
3     v2     v3
4     v2     v4
> B
  source target variable
1     V1     V2        3
2     V2     V5        4
3     v1     V3        0
4     V4     V3        2
5     V4     V2        1
6     V5     V4        0

理想的结果(1):

  source target
1     V2     V5
2     V1     V3
3     V4     V3
4     V5     V4

理想的结果(2):

  source target variable
1     V1     V2        3
2     V2     V4        1

用R如何做到这一点?

艾伦·卡梅伦

首先,您将获得一个anti_join,尽管您将需要在源和目标这两种组合上进行反连接,因为在示例中方向似乎无关紧要。请注意,toupper由于您的示例中的大写字母不固定,因此示例中所建议的情况应忽略,我不得不使用它。

library(dplyr)

anti_join(anti_join(B, A %>% mutate_all(toupper), 
                    by = c("source", "target")),
          A %>% mutate_all(toupper), 
          by = c(target = "source", source = "target")) %>%
  select(-variable)
#>   source target
#> 1     V2     V5
#> 2     v1     V3
#> 3     V4     V3
#> 4     V5     V4

您可以通过绑定两个inner_joins获得第二个结果

bind_rows(inner_join(B, A %>% mutate_all(toupper), 
                     by = c("source", "target")), 
          inner_join(B, A %>% mutate_all(toupper), 
                     by = c(source = "target", target = "source")))
#>   source target variable
#> 1     V1     V2        3
#> 2     V4     V2        1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于两个不同列中的两个条件的子集数据帧R

如果某些条件匹配,则将从不同数据帧中的两个值求和

组合来自两个不同数据帧的两列以删除 Pandas 中的缺失值

在 Python/R 中两个不同大小的数据帧中进行 1 到 2 匹配

从PySpark中的两个不同数据帧中减去列的值以找到RMSE

R-比较两列中不同长度的两个数据帧的相同值

Pyspark - 从两个不同的数据帧中减去列

从 R 中的两个不同数据帧创建数组

R:匹配不同数据帧中的两列,输出倍数

如何从R中的两个不同数据帧中添加两列,其中一列只是另一列的唯一值的子集

提取与R中其他列匹配的两个不同列中的值

对 R 中数据帧的两个不同列执行 MAD 计算

合并两个不同列中具有匹配值的数据框-Pandas

如何基于两个不同数据框中的匹配值创建新列?

关联向量,其向量名与r数据帧中每行中的两个变量的值匹配

在R中的数据帧中的两个不同列中随机交换一定数量的条目

如何比较pyspark中两个不同数据帧中的两列

使用R来匹配两个数据帧的公共列中的值,然后跨相应数据写入

根据两个不同列中的匹配值连接两个以空格分隔的文件

根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

在R中:当两个条件之间的条件匹配时,用另一个数据帧的值替换一个数据帧列的值

根据匹配值将两个单独的数据帧匹配到更大的数据帧(在 Python 中)

R:根据列中的值合并两个数据帧,并返回两个数据帧的所有值

R中两个不同列的值求和

如何从两个数据帧中删除不匹配的数据,以在R中创建一个新的数据帧

如何使用mapply将函数应用于两个不同数据帧中的两个不同列

计算R中两个不同数据帧中两个时间戳之间的行

匹配一列和两个较短的库中的单词,然后在 r 中合并这两个数据帧

找出熊猫中两个不同数据帧的交集