我有一个数据框,其中变量是一个字符串。有没有办法创建另一个具有与x相同元素的变量,但每个变量按升序或降序排序如下:
x_old :( trad,jfwd,qerf ...)
x_new:(adrt,dfjw,efqr ...)
答案 0 :(得分:5)
使用虚拟数据:
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"
答案 1 :(得分:3)
必须有一种更简单的方法:
x <- c("trad", "jfwd", "qerf")
unname(sapply(x, function(i)paste(sort(unlist(strsplit(i, ""))), collapse="")))
[1] "adrt" "dfjw" "efqr"