% mutate(opsal-6ren">
gpt4 book ai didi

r - 查找R中字符列的差异

转载 作者:行者123 更新时间:2023-12-02 18:23:12 25 4
gpt4 key购买 nike

我有一个数据帧,其中包含操作重新编码之前和之后的 ICPM 代码。

    df1 <- tibble::tribble(~ops, ~opsalt,
"8-915, 5-847.32", "5-847.32, 5-852.f3, 8-915",
"8-915, 5-781.30, 8-919, 5-807.4, 5-800.c1, 5-79b.81", "5-79b.81, 5-800.c1, 5-805.y, 5-807.4, 8-919, 5-781.30, 8-915",
"5-786.1, 5-808.a4, 5-784.1u, 5-783.2d, 5-788.5e", "5-788.5e, 5-783.2d, 5-780.4d, 5-784.7d, 5-784.1u, 5-808.a4, 5-786.1",
"8-915, 5-784.0v, 5-788.5f, 5-788.40, 5-808.b0, 5-786.k, 5-788.60, 5-788.00, 5-786.0, 5-783.2d", "5-788.00, 5-788.60, 5-786.0, 5-786.k, 5-788.40, 5-808.b0, 5-788.5f, 5-781.ad, 5-784.0v, 8-915")

我想计算两列,其中包含两列之间的不同代码。
对于第一行,ops 和 opsalt 之间的差异将是字符(0)。
opsalt 和 ops 之间的差异是 5-852.f3。

尝试过:

df <–  df %>% mutate(ops = strsplit(ops,",")) %>% 
mutate(opsalt =strsplit(opsalt,","))
df <- df %>% rowwise() %>% mutate(neu_alt = list(setdiff(ops,opsalt))) %>% mutate(alt_neu = list(setdiff(opsalt,ops)))

这不起作用,因为我想比较各个字符串的一部分而不是整个字符串。

最佳答案

如果您在第一次 mutate 调用中在 strsplit 中使用 ", "df1 ,它应该可以工作。

library(dplyr)

df1 %>%
mutate(across(.fns = ~ strsplit(.x, ", "))) %>%
rowwise %>%
mutate(neu_alt = list(setdiff(ops, opsalt)),
alt_neu = list(setdiff(opsalt, ops)))

#> # A tibble: 4 x 4
#> # Rowwise:
#> ops opsalt neu_alt alt_neu
#> <list> <list> <list> <list>
#> 1 <chr [2]> <chr [3]> <chr [0]> <chr [1]>
#> 2 <chr [6]> <chr [7]> <chr [0]> <chr [1]>
#> 3 <chr [5]> <chr [7]> <chr [0]> <chr [2]>
#> 4 <chr [10]> <chr [10]> <chr [1]> <chr [1]>

reprex package 于 2022 年 1 月 4 日创建(v0.3.0)

关于r - 查找R中字符列的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70584714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com