【发布时间】:2011-08-25 00:53:34
【问题描述】:
我有一个数据框,其中变量是字符串。有没有办法创建另一个具有与 x 相同元素的变量,但每个变量都按升序或降序排序,如下所示:
x_old: (trad, jfwd, qerf...)
x_new: (adrt, dfjw, efqr...)
【问题讨论】:
-
这实际上是相同的:stackoverflow.com/q/5904797/602276
标签: r
我有一个数据框,其中变量是字符串。有没有办法创建另一个具有与 x 相同元素的变量,但每个变量都按升序或降序排序,如下所示:
x_old: (trad, jfwd, qerf...)
x_new: (adrt, dfjw, efqr...)
【问题讨论】:
标签: r
使用虚拟数据:
strs <- c("trad", "jfwd", "qerf")
您可以通过字符向量上的一系列步骤来做到这一点:
sapply( ## 3
lapply( ## 2
sapply(strs, strsplit, ""), ## 1
sort), ## 2
paste, collapse = "") ## 3
给出:
> sapply(lapply(sapply(strs, strsplit, ""), sort), paste, collapse = "")
trad jfwd qerf
"adrt" "dfjw" "efqr"
在函数中,## 1 将字符向量的每个元素拆分为单个字符,## 2 对这些字符集进行排序,## 3 将它们再次粘贴在一起。
我们可以通过将步骤封装到一个函数中来一步完成:
foo <- function(x) {
x <- strsplit(x, split = "")[[1]]
x <- sort(x)
paste(x, collapse = "")
}
可以用作:
> sapply(strs, foo)
trad jfwd qerf
"adrt" "dfjw" "efqr"
【讨论】:
一定有更简单的方法:
x <- c("trad", "jfwd", "qerf")
unname(sapply(x, function(i)paste(sort(unlist(strsplit(i, ""))), collapse="")))
[1] "adrt" "dfjw" "efqr"
【讨论】: