如何用 R 将一列分成三列?

How to separate a column into threecolumns with R?

我有一个 data.frame,其中一列具有这样的结构: "2019-09-11 13:29:55:647 INFO".

如何将此列分成三列,其中:

我想使用tidyr separate 函数,但不能为分隔符编写正则表达式。

我们可以在插入分隔符

后使用read.csv
cbind(df1, read.csv(text = sub("^(\S+) (\S+):([^:]+)$", 
         "\1,\2,\3", df1$datetime), col.names =c('newcol1', 'newcol2', 'newcol3'),
      header = FALSE, stringsAsFactors = FALSE))

如果我们使用 tidyverse,请指定带有正则表达式查找的 sep,即匹配 : 后跟不是 : 的字符直到结束或两位数字之间的space

library(tidyr)
separate(df1, datetime, into = c('newcol1', 'newcol2', 'newcol3'), 
        sep="(?<=\d) (?=\d)|:(?=[^:]+$)")
 #   newcol1  newcol2  newcol3
#1 2019-09-11 13:29:55 647 INFO

或使用 extract,将字符作为一个组捕获,直到最后一个 : 后跟数字,直到字符串结尾

extract(df1, datetime, into = c('newcol1', 'newcol2', 'newcol3'), 
        "^(\S+)\s(.*):([^:]+)$")
#    newcol1  newcol2  newcol3
#1 2019-09-11 13:29:55 647 INFO

数据

df1 <- data.frame(datetime = "2019-09-11 13:29:55:647 INFO", 
        stringsAsFactors = FALSE)