我想使用列A合并两个数据帧(df1和df2)的行:

 #df1   
    A <- c('ab','ab','bc','bc','bc','cd')
    B <- floor(runif(6, min=0, max=10))
    C <- floor(runif(6, min=0, max=10))
    D <- floor(runif(6, min=0, max=10))
    E <- c('a, b, c','a, d, e','a, g, h','d, e, f','a, d, f','f, j')
    df1 <- data.frame(A,B,C,D,E)
    df1
       A B C D        E
    1 ab 5 4 3  a, b, c
    2 ab 9 4 0  a, d, e
    3 bc 4 4 9  a, g, h
    4 bc 5 5 6  d, e, f
    5 bc 1 6 6  a, d, f
    6 cd 1 2 0     f, j

 #df2
   A <- c('ab','bc','cd')
   B <- floor(runif(3, min=0, max=10))
   E <- c('a, d','d, f','n, m')
   df2 <- data.frame(A,B,E)
   df2
   A B    E
   1 ab 4 a, d
   2 bc 7 d, f
   3 cd 1 n, m

我可以做的很简单:

df3 <- merge(x=df1, y=df2, by='A', all.x = TRUE)

然而,有合并的条件.也就是说,当df1中存在df2中的all个子字符串(第E列)时,我只想合并df2df1中的行,因此输出应该如下所示:

    df3
       A B C D        E  A.y  B.y  E.y
    1 ab 5 4 3  a, b, c  NA   NA   NA
    2 ab 9 4 0 a, d, e,  ab   6    a, d
    3 bc 4 4 9  a, g, h  NA   NA   NA
    4 bc 5 5 6  d, e, f  bc   7    d, f
    5 bc 1 6 6  a, d, f  bc   7    d, f
    6 cd 1 2 0     f, j  NA   NA   NA

我知道关于向量比较,有一个使用%in%的选项.然而,我有字符串,我应该先执行strsplitunlist,然后执行比较吗?

推荐答案

这相当混乱,但应该满足您的要求:

首先,展开两个E值的行,然后按键列分组,以判断RHS E中的任何值是否在LHS E中.然后根据查找表进行筛选.

library(tidyverse)

df3 <- merge(x=df1, y=df2, by='A', all.x = TRUE)
      
check_rows <- df3 %>% 
  separate_rows(E.y, sep = ',') %>% 
  separate_rows(E.x, sep = ',') %>% 
  mutate(E.x = trimws(E.x),
         E.y = trimws(E.y)) %>% 
  group_by(A) %>% 
  mutate(check = E.y %in% E.x,
         check = ifelse(any(check == TRUE), TRUE, FALSE)) %>% 
  select(A, check) %>% 
  unique() %>% 
  filter(check == TRUE)


df3 <- df3 %>% 
  filter(A %in% check_rows$A)

R相关问答推荐

导入到固定列宽的R中时出现问题

如何使用geom_sf在边界显示两种 colored颜色 ?

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

R:连接值,而不是变量?

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

在R中使用download. file().奇怪的URL?

在R中无法读入具有Readxl和lApply的数据集

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

Ggplot2中的重复注记

如何写商,水平线,在一个单元格的表在R

我正在努力用R计算数据集中的中值逐步距离

R中的哈密顿滤波

具有重复元素的维恩图

QY数据的处理:如何定义QY因素的水平

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

如何平滑或忽略R中变量的微小变化?

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

访问数据帧中未定义的列时出现R错误

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

R中的交叉表