【问题标题】:Use tidyr::separate on column with variable number of separator characters在具有可变数量分隔符的列上使用 tidyr::separate
【发布时间】:2021-09-15 19:31:49
【问题描述】:

我需要解析由文件夹名称创建的列。一些文件夹有许多子文件夹,导致名称中的“/”数量可变。如何在“/”上分隔并最终得到许多列,如果没有子文件夹,其中一些将具有“NA”?

代表:

df <- data.frame(group = c("a", "b", "c"), var1 = c(3, 1, 2), 
            id = c("C:/Users/me/big_folder/little_folder/plot/783/abc/551/statistics.csv",
                   "C:/Users/me/big_folder/little_folder/plot/rep/634/efg/552/statistics.csv", 
                   "C:/Users/me/big_folder/228/hij/553/statistics.csv"))  

separate(df, id, sep = "/", into = c(a, b, c, d, e, f, g, h, i, j))

【问题讨论】:

  • 你需要一个字符串向量为into,参数也是sep,即separate(df, "id", sep = "/", into = letters[1:10])

标签: r tidyr


【解决方案1】:

根据?separate

into - 要创建为字符向量的新变量的名称。使用 NA 省略输出中的变量。

OP 的当前代码使用不带引号的into。要么使用内置向量letters

library(tidyr)
separate(df, "id", sep = "/", into = letters[1:10])

或使用

separate(df, "id", sep = "/", into = 
        c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"))

-输出

 group var1  a     b  c          d             e    f   g              h    i              j
1     a    3 C: Users me big_folder little_folder plot 783            abc  551 statistics.csv
2     b    1 C: Users me big_folder little_folder plot rep            634  efg            552
3     c    2 C: Users me big_folder           228  hij 553 statistics.csv <NA>           <NA>

【讨论】:

    【解决方案2】:

    如果您正在寻找替代方案: 我们可以使用来自splitstackshape 包的cSplit。 优点是我们不必在之前定义结果列:

    library(splitstackshape)
    cSplit(df, "id", "/")
    

    输出:

       group var1 id_01 id_02 id_03      id_04         id_05 id_06 id_07          id_08 id_09          id_10          id_11
    1:     a    3    C: Users    me big_folder little_folder  plot   783            abc   551 statistics.csv           <NA>
    2:     b    1    C: Users    me big_folder little_folder  plot   rep            634   efg            552 statistics.csv
    3:     c    2    C: Users    me big_folder           228   hij   553 statistics.csv  <NA>           <NA>           <NA>
    

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 1970-01-01
      • 2022-01-14
      • 2015-05-11
      • 2019-08-12
      • 2016-08-03
      • 2021-01-06
      • 2016-01-22
      相关资源
      最近更新 更多