如何在R中减去两个逗号分隔的列?

Sno*_*ake 6 r stringr data.table

我有一个我似乎无法解决的小问题。给定两列:

dt <- data.table(ColumnA = c("A,B,C,A,A,A", "A,B,C"), ColumnB = c("A,C,A", "C"))
Run Code Online (Sandbox Code Playgroud)

我想从 columnA 中“减去”columnB,这将导致:

data.table(Result = c("B,A,A", "A,B"))
Run Code Online (Sandbox Code Playgroud)

如果不首先将其转换为列表,然后尝试减去该列表,如何实现这一事实?此外,由于数据集相当大,无法在 R 中使用 for 循环来完成。

逗号分隔字符串中的每一项都应视为一项,如果出现一次,则应仅减去一次。因此,并非所有 A 都在第一行中消失了。

jor*_*ran 6

利用vecsets::vsetdiff不删除重复项的功能的另一个选项:

library(dplyr)
library(tidyr)
library(purrr)
library(vecsets)

dt %>% 
  mutate(x = strsplit(ColumnA,","),
         y = strsplit(ColumnB,",")) %>% 
  mutate(z = map2(x,y,vecsets::vsetdiff))

      ColumnA ColumnB                x       y       z
1 A,B,C,A,A,A   A,C,A A, B, C, A, A, A A, C, A B, A, A
2       A,B,C       C          A, B, C       C    A, B
Run Code Online (Sandbox Code Playgroud)

请注意,您最终会在此处获得列表列(我特意为此创建了这些列),但无论如何,使用这种方式处理数据可能会更容易。