【问题标题】:How to convert a single string array in to multiple variables如何将单个字符串数组转换为多个变量
【发布时间】:2022-12-17 21:08:10
【问题描述】:

由于我无法将给定的数据文件转换为任何有用的文件,例如 .csv 文件,因此我想从单个字符串中提取多个变量。

一个字符串被标记为 A 并且有 X 个点(介于 10 和 17 之间)。 第一个点对应于 1(如 A1),第二个点对应于 A2,依此类推。如果只有 10 个数字那么 max 将是 A10,如果有 17 个则 A17 是最大的。我不确定如何使用dim()

如果给定字符串中有 5 个数字,我如何按时间顺序将单个字符串变量 A 中的数字提取到编号为 A1:5 的多个变量中?

A: 0.00 15.00 16.00 0.00 12.00

进入

id   A1    A2     A3     A4    A5
001  0.00  15.00  16.00  0.00  12.00

【问题讨论】:

    标签: r string dataframe


    【解决方案1】:

    如果您的字符串称为string

    string <- "A: 0.00 15.00 16.00 0.00 12.00"
    

    然后你可以这样做:

    sub(":", "", string) |>
      strsplit(' ') |>
      sapply(function(x) {
        setNames(as.numeric(x[-1]), paste0(x[1], seq_along(x[-1])))
      }) |> 
      t() |>
      as.data.frame()
    #>   A1 A2 A3 A4 A5
    #> 1  0 15 16  0 12
    

    【讨论】:

    • 谢谢!它可以通过一些摆弄工作,我仍然需要更改一些变量。有些显然是数字,有些是字符串(或字符变量)。这个数据集太可怕了。你能展示如何从数字变量中提取结果吗?我有很多变量需要这个过程
    • @fleems 以上答案数字。 (这是一个带有数字列的数据框)。 “提取结果”是什么意思?以什么格式?
    • 我的意思是如果起始变量不是字符串,而是数字数组(如在数据框中)。因此,从具有 5 个数据点的原始数值变量中,按时间顺序提取 A1 到 A5 变量。
    【解决方案2】:

    read.table 的另一种选择

    out <- read.table(text = trimws(string, whitespace = ".*:\s+"), header = FALSE)
    names(out) <- sub("V", substring(string, 1, 1), names(out))
    

    -输出

    > out
      A1 A2 A3 A4 A5
    1  0 15 16  0 12
    

    数据

    string <- "A: 0.00 15.00 16.00 0.00 12.00"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 2023-03-07
      • 2015-11-24
      • 2018-03-04
      • 1970-01-01
      相关资源
      最近更新 更多