首页 > 解决方案 > R将字符串拆分为元素,排序和重组

问题描述

我试图解决的基本问题是针对数据框中的单个字符向量和字符向量完成的。我正在尝试为数据表执行此操作,因为我有很多列是具有多个元素的单个字符串,所以我想在内存中执行此操作而不制作副本。在下面的代码中,我尝试遵循此链接所采用的方法。

test <- data.table(col1 = c("cow, pig, horse"), col2 = c("fish, aardvark, moose"))
test2 <- data.table(col1 = c("orange, pig, frog"), col2 = c("whale, aardvark, elk"))
test <- rbind(test, test2)
cols <- c("col1", "col2")

test[, (cols) := (lapply(.SD, function(x) {
  paste(sort(trimws(strsplit(x, ',')[[1]])), collapse=',')
  })), .SDcols = cols]

我最终得到的是第一行,排序,在两行。请帮忙,并解释一下我做错了什么。

标签: rdata.table

解决方案


我们需要第二个 *apply 来遍历 x 的元素。

test[, (cols) := (lapply(.SD, function(x) {
   #browser()
   sapply(x, function(y) paste(sort(trimws(strsplit(y, ',')[[1]])), collapse=','))
})), .SDcols = cols]

> test
              col1                col2
1:   cow,horse,pig aardvark,fish,moose
2: frog,orange,pig  aardvark,elk,whale

strsplit(x, ',')[[1]]使用每列的第一个元素,如下所示

Browse[1]> strsplit(x, ',')
[[1]]
[1] "cow"    " pig"   " horse"

[[2]]
[1] "orange" " pig"   " frog"

Browse[1]> strsplit(x, ',')[[1]]
[1] "cow"    " pig"   " horse"

推荐阅读