【问题标题】:concatenate a string into a numeric vector将字符串连接成数字向量
【发布时间】:2020-02-09 11:29:52
【问题描述】:

假设我有一长串数字"1010101010101010100011011"。我想用“,”将它们分开,就像"1,0,1,0,1,0,1,1,...",然后转换成一个像c(1,0,1,0,1,...)这样的数字向量。

什么是明智的做法?

【问题讨论】:

    标签: r string split casting numeric


    【解决方案1】:
    a <- "1010101010101010100011011"
    
    b <- unlist(strsplit(a,""))
    
    c <- as.numeric(b)
    
    class(c)
    #> [1] "numeric"
    

    【讨论】:

    • 为了效率可以使用as.integer(unlist(strsplit(a, "", fixed = TRUE)))
    • 是的。为了清楚起见,我只是想展示这些步骤。
    • 我的评论不是关于这两个步骤,而是关于fixed = TRUEas.integer
    • 还是为了效率,把unlist换成[[1]],即strsplit(a, "", fixed = T)[[1]]
    • 在哪里可以找到有关如何在 R 中编写更高效代码的内容?好奇为什么某些代码比其他代码更高效
    【解决方案2】:

    第二个选项是

    utf8ToInt(x) - 48L
    # [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
    

    【讨论】:

      【解决方案3】:

      1) strapply 提取每个字符并将其转换为数字,给出一个数字向量:

      library(gsubfn)
      x <- "1010101010101010100011011"
      strapply(x, ".", as.numeric, simplify = c)
      ## [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
      

      如果您有此类字符串的向量,那么这可用于生成数字向量列表:

      xx <- c(x, x)
      strapply(xx, ".", as.numeric)
      

      2) 扫描 在每个字符后插入一个空格,然后扫描它以给出一个数字向量。 x 在 (1) 中定义。

      scan(text = gsub("(.)", "\\1 ", x), quiet = TRUE)
      ## [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
      

      3) read.fwf 将其作为宽度为 1 的固定字段读入,给出数据帧。 x 在 (1) 中定义。

      read.fwf(textConnection(x), widths = rep(1, nchar(x)))
      ##   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
      ## 1  1  0  1  0  1  0  1  0  1   0   1   0   1   0   1   0   1   0   0   0   1
      ##   V22 V23 V24 V25
      ## 1   1   0   1   1
      

      【讨论】:

        【解决方案4】:

        另一种选择(按照您描述的步骤),首先插入,

        x <- gsub("(?!^|$)", ",", x, perl = TRUE)
        
        x
        
        [1] "1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1"
        

        然后使用scan 转换为您的整数向量:

        scan(text = x, what = 0L, sep = ",", quiet = TRUE)
        
        [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
        

        【讨论】:

        • 也许x应该分配给scan中的参数text,否则会报错。 IE。 scan(text = x, what = 0L, sep = ",", quiet = TRUE).
        猜你喜欢
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 2021-10-05
        • 2017-10-25
        • 1970-01-01
        相关资源
        最近更新 更多