将r中的单个列拆分为4个单独的列

时间:2018-01-17 04:46:16

标签: r regex tidyr

我需要将单个数据帧列(ID)拆分为五个单独的列(A,B,C,D,E)。列需要拆分:

  • A - 第一封信
  • B - 直至第二个字母的所有数字
  • C - 直到最后一个字母的所有字母
  • D - 最后一个号码
  • E - 最后一封信

以下是一个例子:

ID Conc
1 A01HGF1a  132
2 D02SDV2b  453

A B C D E Conc
1 A 01 HGF 1 a  132
2 D 02 SDV 2 b  453

我试图使用tidyr中的separate(),但无法弄清楚如何正确使用正则表达式。非常感谢任何帮助!

这是我到目前为止所尝试的内容

`separate(df, ID, into = c("A", "B", "C", "D","E"), sep = "(^.)(\\d+)(\\S+)(\\d+)(\\S+)")`

1 个答案:

答案 0 :(得分:0)

您可以在此处使用sub作为基本R选项:

df$A <- sub("^(\\w).*", "\\1", df$ID)
df$B <- sub("^\\w(\\d+).*", "\\1", df$ID)
df$C <- sub("^\\w\\d+(\\D+).*", "\\1", df$ID)
df$D <- sub(".*?(\\d+)\\D+$", "\\1", df$ID)
df$E <- sub(".*?(\\D+)$", "\\1", df$ID)
df

        ID Conc A  B   C D E
1 A01HGF1a  132 A 01 HGF 1 a
2 D02SDV2b  453 D 02 SDV 2 b

Demo