【问题标题】:R strsplit problem (easy fix?)R strsplit 问题(容易修复?)
【发布时间】:2010-12-17 20:53:04
【问题描述】:

这应该是一件容易的事。我在这里读到的类似例子有点复杂,而且这些技术对我来说并不适用。

我有一个名为 id_string 的变量

> typeof(id_string)
[1] "character"

> id_string
[1] "1,2,5,6,10"

我想要做的是将这些值拆分出来并将它们存储在一个新变量中。例如:

x[1] = 1
x[4] = 6
x[5] = 10

我试过了

x <- strsplit(id_string,",") 

用逗号分隔,但我只得到x = "1 2 5 6 10"

我在这里通读了this post,这是相似的,并认为类似

x <- read.csv(textConnection(id_string))

会起作用,但无济于事。

也许我想多了。如果您有任何想法,请告诉我。谢谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    不知道你做错了什么,因为它像宣传的那样工作。

    > x <- unlist(strsplit("1,2,5,6,10", ","))
    > x
    [1] "1"  "2"  "5"  "6"  "10"
    > x[1]
    [1] "1"
    

    请记住,strsplit 返回一个 list

    【讨论】:

    • 哇,是的,我忘记了它周围的非列表。感谢您的快速回复!
    • @user - 如果您要一直处理数字,您也可以将所有这些都包含在 as.numeric() 中。如果您发现自己经常这样做,将所有这些放入自定义函数中可以节省一些时间和打字。
    • x
    • 我认为使用 '[[1]]' 而不是
    • @hadley 而不是使用unlist 并将其转换为向量?我认为这必须取决于情况/应用程序。
    【解决方案2】:

    坚持使用上述的 strsplit 可能是最好的。

    我认为 read.csv 没有达到您的预期,因为它正在寻找标题。你可以试试:

    s <- "1,2,5,6,10"
    read.csv(textConnection(s), header=FALSE)
    

    明确告诉它不要寻找标题。不过,您仍然必须从生成的 data.frame 中提取您的数字。使用较低级别的函数扫描可能会更好,这将直接为您提供数字向量:

    scan(textConnection(s), sep=",", quiet=TRUE)
    

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      相关资源
      最近更新 更多