【问题标题】:How to sort characters in each element of a character vector? [duplicate]如何对字符向量的每个元素中的字符进行排序? [复制]
【发布时间】:2011-08-25 00:53:34
【问题描述】:

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

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

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

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

【问题讨论】:

标签: r


【解决方案1】:

使用虚拟数据:

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 用于解释我的单线工作原理!
  • @Andrie :-D 我想知道这是否能让我获得预知徽章..?
【解决方案2】:

一定有更简单的方法:

x <- c("trad", "jfwd", "qerf")
unname(sapply(x, function(i)paste(sort(unlist(strsplit(i, ""))), collapse="")))
[1] "adrt" "dfjw" "efqr"

【讨论】:

  • 完美!谢谢,安德烈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2022-01-13
  • 1970-01-01
相关资源
最近更新 更多