首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将字符串拆分分隔符后面的几个字符

将字符串拆分分隔符后面的几个字符
EN

Stack Overflow用户
提问于 2016-11-18 03:09:33
回答 1查看 52关注 0票数 0

我有一个需要拆分的名称和州的大型数据集。拆分后,我希望为每个名称和州创建新的行。我的数据字符串在多行中,如下所示

代码语言:javascript
代码运行次数:0
运行
复制
"Peter Johnson, IN Chet Charles, TX Ed Walsh, AZ"
"Ralph Hogan, TX, Michael Johnson, FL"

我需要数据看起来像这样

代码语言:javascript
代码运行次数:0
运行
复制
attr      name            state
1         Peter Johnson   IN
2         Chet Charles    TX
3         Ed Walsh        AZ
4         Ralph Hogan     TX
5         Michael Johnson FL

我想不出该怎么做,也许在逗号后面用某种方式把它拆分几个字符?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-11-18 03:21:34

如果它是多行字符串,那么我们可以使用gsub创建一个分隔符,使用strsplit拆分字符串,在输出list中使用split的组件创建data.frame,然后一起使用rbind

代码语言:javascript
代码运行次数:0
运行
复制
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

或者,这可以以一种紧凑的方式完成。

代码语言:javascript
代码运行次数:0
运行
复制
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

数据

代码语言:javascript
代码运行次数:0
运行
复制
lines <- readLines(textConnection("Peter Johnson, IN Chet Charles, TX Ed Walsh, AZ
 Ralph Hogan, TX, Michael Johnson, FL"))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40663107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档