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 都在第一行中消失了。
利用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)
请注意,您最终会在此处获得列表列(我特意为此创建了这些列),但无论如何,使用这种方式处理数据可能会更容易。
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |