r - 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]
我最终得到的是第一行,排序,在两行。请帮忙,并解释一下我做错了什么。
解决方案
我们需要第二个 *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"
推荐阅读
- mrtk - 摄像头从楼层开始 2019.2 + MRTK v2.0.0
- xml - 如何在 Oracle 中读取 XML 数据并解析为临时表
- ruby-on-rails - 如何在 bash shell 脚本内的 ruby-on-rails 控制台上运行命令?
- javascript - Javascript onMouseMove 事件语法
- html - 如何将十六进制代码颜色划分为主要颜色系列的最小损失?
- elasticsearch - 聚合 .keyword 以仅返回包含特定字符串的键
- flutter - Flutter - 错误:参数类型'String/*1*/'不能分配给参数类型'String/*2*/'
- angular - 名为“id”的变量在角度插值中不起作用
- java - Selenium v3.141 是否支持 Java 13?
- ruby - 从数组元素中提取值