【问题标题】:How to split a dataframe column by the first instance of a character in its values如何通过其值中字符的第一个实例拆分数据框列
【发布时间】:2019-04-18 14:37:50
【问题描述】:

我有一个数据框(或向量?)

x <- data.frame(a=c("A_B_D", "B_C"))

我想通过“_”的第一个实例将x$a中的向量分成两个新列来获取

x$b 
[1] "A" "B_D"

x$c
[2] "B" "C"

我尝试了 gsub 的变体,但无法找到解决方案。

【问题讨论】:

    标签: r regex


    【解决方案1】:

    另一种选择可能是使用tidyr::separate

    separate(x,a,into = c("b","c"),sep = "_",remove = FALSE,extra = "merge")
    

    【讨论】:

      【解决方案2】:

      一个想法是用另一个分隔符替换第一个 _ 并在新分隔符上拆分。这是因为使用sub 只会替换第一个找到的分隔符(而gsub 替换所有),即

      strsplit(sub('_', ',', x$a), ',', fixed = TRUE)
      #[[1]]
      #[1] "A"   "B_D"
      
      #[[2]]
      #[1] "B" "C"
      

      要在原始数据框中创建两个新列,

      within(x, new <- data.frame(do.call(rbind, strsplit(sub('_', ',', x$a), ',', fixed = TRUE))))
      #      a new.X1 new.X2
      #1 A_B_D      A    B_D
      #2   B_C      B      C
      

      【讨论】:

      • 这是一个聪明的解决方案!
      • 不错!如何拆分为 x$b 和 x$c?也许我应该更清楚。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2019-09-20
      • 2019-04-04
      • 1970-01-01
      • 2019-12-13
      • 2016-04-29
      • 1970-01-01
      相关资源
      最近更新 更多