【问题标题】:R split character vector using strsplit?R使用strsplit分割字符向量?
【发布时间】:2012-09-08 13:55:36
【问题描述】:

作为 R 中的新手,如何正确对待具有多个值的变量:

x = c("1","1","1/2","2","2/3","1/3")

如您所见,值 3 仅与其他值一起出现。

要进一步计算x,最好获得3个向量,例如:

X[1] = c(1,1,1,NA,NA,1)

因为“1”出现在第 1、第 2、第 3 和第 6 位。 与X[2]X[3] 同上

这样做似乎保留了所有信息:我错了吗?

我已经测试了 strsplit,但它没有保留 NA 的值,这些值不在我的向量中。

【问题讨论】:

    标签: r split statistics dataframe strsplit


    【解决方案1】:

    另一种方法是使用我的“splitstackshape”包中的cSplit_e

    x = c("1","1","1/2","2","2/3","1/3")
    library(splitstackshape)
    cSplit_e(data.frame(x), "x", "/")
    #     x x_1 x_2 x_3
    # 1   1   1  NA  NA
    # 2   1   1  NA  NA
    # 3 1/2   1   1  NA
    # 4   2  NA   1  NA
    # 5 2/3  NA   1   1
    # 6 1/3   1  NA   1
    

    (请注意,此处的结果与已接受答案中的结果相比是转置的。)

    【讨论】:

      【解决方案2】:

      这似乎有效:

      x = c("1","1","1/2","2","2/3","1/3")
      
      #Split on your character. This may not be inclusive of all characters that 
      #need to be split on.
      xsplit <- strsplit(x, "\\/")
      #Find the unique items
      xunique <- unique(unlist(xsplit))
      
      #Iterate over each xsplit for all unique values
      out <- sapply(xsplit, function(z)  
        sapply(xunique, function(zz) zz %in% z)
      )
      #convert FALSE to NA
      out[out == FALSE] <- NA
      
      #Results in
      > out
        [,1] [,2] [,3] [,4] [,5] [,6]
      1 TRUE TRUE TRUE   NA   NA TRUE
      2   NA   NA TRUE TRUE TRUE   NA
      3   NA   NA   NA   NA TRUE TRUE
      

      【讨论】:

      • 几乎!似乎我无法像在我的示例中那样访问第一行或第一列中的所有值,因为当我期望第一行的向量时,out[1] 只给了我一个术语
      • @CyrilleGUIBERT - out 是一个矩阵,因此您需要使用matrix[i,j] 表示法对其进行索引,其中i 指的是行,j 是列。所以out[1,] 会给你第一行和所有的列。 “空白”索引分别表示“所有行或列”。
      • OK:我验证答案;还有一个问题:这是验证此类数据并在我的 data.frame 中的任何其他向量之后计算它们的好方法吗?
      • @CyrilleGUIBERT - 老实说,不太确定。您的数据“看起来”应该是数字,但您似乎出于某种原因将其视为字符数据。您要进行哪种验证?
      • 正如我所说,我是 R 的新手;其他统计软件将此类数据视为多值变量(因为它们通常由复选框作为多项选择选项产生);进一步的计算并没有什么特别的:例如,描述性统计数据和对交叉表中其他变量的操作;显然我将 TRUE 转换为 1 获取数值(使用 out[out==TRUE] &lt;- 1
      猜你喜欢
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多