gpt4 book ai didi

删除 R 中文本前后的所有字符,然后从新文本创建列

转载 作者:行者123 更新时间:2023-12-05 09:31:44 25 4
gpt4 key购买 nike

所以我有一个字符串,我试图解析它,然后用我提取的数据创建 3 列。据我所见,stringr 并没有真正涵盖这种情况,到目前为止我使用的 gsub 过多,涉及我制作多列,从这些新列中解析,然后删除它们,这看起来效率很低。

格式是这样的:

"blah, grabbed by ???-??-?????."

我需要这个:

???-??-?????

我在这里使用了占位符,但这是字符串通常的样子

"blah, grabbed by PHI-80-J.Matthews."

"blah, grabbed by NE-5-J.Mills."

有时名字后面会有这样的文字:

"blah, grabbed by KC-10-T.Hill. Blah blah blah."

这就是我希望的最终结果:

<表类="s-表"><头><日>地点 数姓名<正文>个人健康指数80马修斯东北5J·米尔斯KC10T。希尔

编辑进一步解释:

大多数字符串都以相同的格式包含其他人,所以 "downed by"需要以某种方式合并以确保它获取正确的名称。

例如

"Throw by OAK-4-D.Carr, snap by PHI-62-J.Kelce, grabbed by KC-10-T.Hill. Penalty on OAK-4-D.Carr"

期望的输出:

<表类="s-表"><头><日>地点 数姓名<正文>KC10T。希尔

最佳答案

此解决方案只是根据提到的逻辑 OP 提取组件,即捕获三组所需的字符 - 1) 一个或多个大写字母 ([A-Z]+) 后跟破折号 (-),2) 然后一个或多个数字 (\\d+),最后 3) 非空白字符 (\\S+) 在破折号之后

library(tidyr)
extract(df1, col1, into = c("Place", "Number", "Name"),
".*grabbed by\\s([A-Z]+)-(\\d+)-(\\S+)\\..*", convert = TRUE)

-输出

# A tibble: 4 x 3
Place Number Name
<chr> <int> <chr>
1 PHI 80 J.Matthews
2 NE 5 J.Mills
3 KC 10 T.Hill
4 KC 10 T.Hill

或者在 base R 中执行此操作

read.table(text = sub(".*grabbed by\\s((\\w+-){2}\\S+)\\..*", "\\1", 
df1$col1), header = FALSE, col.names = c("Place", "Number", "Name"), sep='-')
Place Number Name
1 PHI 80 J.Matthews
2 NE 5 J.Mills
3 KC 10 T.Hill

数据

df1 <- structure(list(col1 = c("blah, grabbed by PHI-80-J.Matthews.", 
"blah, grabbed by NE-5-J.Mills.", "blah, grabbed by KC-10-T.Hill. Blah blah blah.",
"Throw by OAK-4-D.Carr, snap by PHI-62-J.Kelce, grabbed by KC-10-T.Hill. Penalty on OAK-4-D.Carr"
)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"
))

关于删除 R 中文本前后的所有字符,然后从新文本创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68670273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com