早上好,
我有一个数据框,其中一列的观察结果如下:
行1: 28316496(15)|28943784(8)|28579919(7)
第2行:29343898(1)
我想创建一个新列,提取不在括号中的数字,创建一个列表,然后附加所有这些数字以创建一个包含所有这些数字的列表。
p>最后换句话说,我想最终得到以下列表:
28316496;28943784;28579919;29343898
它也可以是任何其他类似的对象,我只是对获取所有这些数字并将它们与另一个数据集进行匹配感兴趣。
我尝试使用str_extract_all来提取数字,但我无法理解模式参数。例如我尝试过:
str_extract_all("28316496(15)|28943784(8)", "\\d+(\\d)")
和
gsub("\\s*\\(.*", "", "28316496(15)|28943784(8)")
但它没有返回我想要的。
有什么想法可以提取括号外的数字并从中创建一个巨大的列表吗?
最佳答案
在base R
中,我们可以使用gsub
删除(
,后面跟着数字和)
,并使用 read.table
在 data.frame 中读取它
read.table(text = gsub("\\(\\d+\\)", "", df1$col1),
header = FALSE, sep = "|", fill = TRUE)
V1 V2 V3
1 28316496 28943784 28579919
2 29343898 NA NA
或者使用str_extract
,使用正则表达式查找
library(stringr)
str_extract_all(df1$col1, "\\d+(?=\\()")
[[1]]
[1] "28316496" "28943784" "28579919"
[[2]]
[1] "29343898"
数据
df1 <- structure(list(col1 = c("28316496(15)|28943784(8)|28579919(7)",
"29343898(1)")), class = "data.frame", row.names = c(NA, -2L))
关于r - Stata - 在字符之前提取数字,创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73837687/