我有一个需要拆分的名称和州的大型数据集。拆分后,我希望为每个名称和州创建新的行。我的数据字符串在多行中,如下所示
"Peter Johnson, IN Chet Charles, TX Ed Walsh, AZ"
"Ralph Hogan, TX, Michael Johnson, FL"
我需要数据看起来像这样
attr name state
1 Peter Johnson IN
2 Chet Charles TX
3 Ed Walsh AZ
4 Ralph Hogan TX
5 Michael Johnson FL
我想不出该怎么做,也许在逗号后面用某种方式把它拆分几个字符?任何帮助都将不胜感激。
发布于 2016-11-17 19:21:34
如果它是多行字符串,那么我们可以使用gsub
创建一个分隔符,使用strsplit
拆分字符串,在输出list
中使用split
的组件创建data.frame
,然后一起使用rbind
。
d1 <- do.call(rbind, lapply(strsplit(gsub("([A-Z]{2})(\\s+|,)",
"\\1;", lines), "[,;]"), function(x) {
x1 <- trimws(x)
data.frame(name = x1[c(TRUE, FALSE)],state = x1[c(FALSE, TRUE)]) }))
cbind(attr = seq_len(nrow(d1)), d1)
# attr name state
#1 1 Peter Johnson IN
#2 2 Chet Charles TX
#3 3 Ed Walsh AZ
#4 4 Ralph Hogan TX
#5 5 Michael Johnson FL
或者,这可以以一种紧凑的方式完成。
library(data.table)
fread(paste(gsub("([A-Z]{2})(\\s+|,)", "\\1\n", lines), collapse="\n"),
col.names = c("names", "state"), header = FALSE)[, attr := 1:.N][]
# names state attr
#1: Peter Johnson IN 1
#2: Chet Charles TX 2
#3: Ed Walsh AZ 3
#4: Ralph Hogan TX 4
#5: Michael Johnson FL 5
数据
lines <- readLines(textConnection("Peter Johnson, IN Chet Charles, TX Ed Walsh, AZ
Ralph Hogan, TX, Michael Johnson, FL"))
https://stackoverflow.com/questions/40663107
复制相似问题