【问题标题】:Reorder a string in R using splitstring使用 splitstring 对 R 中的字符串重新排序
【发布时间】:2015-07-24 05:19:30
【问题描述】:

我不知道我做错了什么。我正在尝试重新排序字符串,我能想到的最简单的方法是删除元素,然后使用 paste 将它们放回原处。但我不知道如何删除元素。这是一个字符串:

x <- "the.cow.goes.moo"

但是当我使用

x <- strsplit(x, '[.]')

导致列表“the”“cow”“goes”“moo”。 并尝试使用

删除第二个元素
x <- x[-2]

[x <- x[x != "cow"]

我得到完全相同的列表。 但是当我将 x 声明为

x <- list("the", "cow", "goes", "moo")

然后

x <- x[-2]

有效!

有什么不同?我究竟做错了什么?另外,有没有更简单的方法来重新排序字符串?

编辑:我刚刚意识到我需要的是“moo.goes.the.cow”,但我需要对许多其他字符串重复相同的更改。所以我需要重新排序元素,实际上不能删除它们。我该怎么做?

【问题讨论】:

  • paste(strsplit(x, '.', fixed=T)[[1]][c(4,3,1,2)], collapse='.')

标签: r text strsplit


【解决方案1】:

strsplit 返回一个list 对象。所以向量x 的每个元素现在都将在list 中分解成单独的片段。以这种方式对列表进行子集化可能会很痛苦,但尽早了解它是件好事。

在您的示例中,它将是:

x[[1]][-2]

对于您的更新,您可以像这样重新排序:

x[[1]][c(2,1,3,4)] # or whatever order you want.
x[[1]][sample(1:x[[1]],length(x[[1]]))] # randomly even

【讨论】:

  • 成功了!谢谢! [[1]] 是什么意思?
  • 它是列表的第一个元素。它使用的符号与向量略有不同。列表的第二个元素,你猜对了[[2]]。有名的名单? [["list_element_name"]]
  • 所以列表基本上是向量的向量?
  • 是的,或者其他任何与此相关的内容(data.frames、其他列表、向量)。
  • 知道了!再次感谢您,这更有意义 - 作为旁注,我实际上如何排列列表元素的顺序?我意识到我最初认为会起作用的东西……没有。我真的很抱歉!
【解决方案2】:

添加这一行

x<-unlist(x)
x <- x[-2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多