我有一个数据框
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,但仍然得到相同的结果,一个合并的列表。
一个来自 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)