如何用 R 将一列分成三列?
How to separate a column into threecolumns with R?
我有一个 data.frame,其中一列具有这样的结构:
"2019-09-11 13:29:55:647 INFO"
.
如何将此列分成三列,其中:
- 第 1 列是:
"2019-09-11 13:29:55"
- 第 2 列是:
"647"
- 第 3 列是
"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)
我有一个 data.frame,其中一列具有这样的结构:
"2019-09-11 13:29:55:647 INFO"
.
如何将此列分成三列,其中:
- 第 1 列是:
"2019-09-11 13:29:55"
- 第 2 列是:
"647"
- 第 3 列是
"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)