操作数据框列中的字符串

use*_*306 5 r dataframe

我有一个数据框

a = data.frame("a" = c("aaa|abbb", "bbb|aaa", "bbb|aaa|ccc"), "b" = c(1,2,3))

     a       b
 aaa|abbb    1
 bbb|aaa     2
 bbb|aaa|ccc 3
Run Code Online (Sandbox Code Playgroud)

我想将栏位值除以“ |” 并对输出进行排序并将它们合并在一起,如下所示

     a       b
 aaa|abbb    1
 aaa|bbb     2
|aaa|bbb|ccc 3
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下

paste(sort(ignore.case(unlist(strsplit(as.character(a$a), "\\|")))),collapse = ", ")
Run Code Online (Sandbox Code Playgroud)

但这只是将所有东西结合在一起。如何在列A的每个值上实现它,并将结果作为数据框获取。我尝试使用lapply,但仍然得到相同的结果,一个合并的列表。

Sot*_*tos 3

一个来自 R 基础的想法,

sapply(strsplit(as.character(a$a), '|', fixed = TRUE), function(i) paste(sort(i), collapse = '|'))
#[1] "aaa|abbb"    "aaa|bbb"     "aaa|bbb|ccc"
Run Code Online (Sandbox Code Playgroud)

因此,要更新您的列 a,只需将其分配回它即可,即

a$a <- sapply(strsplit(as.character(a$a), '|', fixed = TRUE), function(i) paste(sort(i), collapse = '|'))
Run Code Online (Sandbox Code Playgroud)