如何对字符向量的每个元素中的字符进行排序?

时间:2011-08-24 16:41:30

标签: r

  

可能重复:
  How to sort letters in a string in R?

我有一个数据框,其中变量是一个字符串。有没有办法创建另一个具有与x相同元素的变量,但每个变量按升序或降序排序如下:

  

x_old :( trad,jfwd,qerf ...)

     

x_new:(adrt,dfjw,efqr ...)

2 个答案:

答案 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"