从通过重复标点符号连接的字符串的列中提取数字
Extracting numbers from column with string connected through repeated punctuation character
我有一列包含这样的值:
string.b.string.1.
string.b.string.2.
string.b.string.3.
string.b.string.10.
string.b.string.300.
以此类推,数字从0到300
我需要从该列中提取并删除数字并将其放入另一列,从而产生如下输出:
"Id" "Variable"
1 string.b.string
2 string.b.string
3 string.b.string
10 string.b.string
300 string.b.string
到目前为止,我对 gsub() 或 readr::parse_number() 的所有尝试都惨遭失败,因为我只是不明白这些 gsub() 函数的语法。我通常失败了,因为“。”在变量中重复...
非常感谢任何帮助,谢谢!
您可以使用 tidyr::extract
:
tidyr::extract(df, V1, c('Variable', 'Id'), '(.*?)(\d+)', convert = TRUE)
# Variable Id
#1 string.b.string. 1
#2 string.b.string. 2
#3 string.b.string. 3
#4 string.b.string. 10
#5 string.b.string. 300
数据
df <- structure(list(V1 = c("string.b.string.1.", "string.b.string.2.",
"string.b.string.3.", "string.b.string.10.", "string.b.string.300."
)), class = "data.frame", row.names = c(NA, -5L))
您可以使用 base 的 strcapture
。
strcapture("(.*)\.(\d+)", df$V1,
data.frame(Variable=character(), Id=integer()))
# Variable Id
#1 string.b.string 1
#2 string.b.string 2
#3 string.b.string 3
#4 string.b.string 10
#5 string.b.string 300
使用base R
read.csv(text = sub("(.*)\.(\d+)\.$", "\1,\2", df$V1), header = FALSE,
col.names = c('Variable', 'Id'))
-输出
# Variable Id
#1 string.b.string 1
#2 string.b.string 2
#3 string.b.string 3
#4 string.b.string 10
#5 string.b.string 300
我有一列包含这样的值:
string.b.string.1.
string.b.string.2.
string.b.string.3.
string.b.string.10.
string.b.string.300.
以此类推,数字从0到300
我需要从该列中提取并删除数字并将其放入另一列,从而产生如下输出:
"Id" "Variable"
1 string.b.string
2 string.b.string
3 string.b.string
10 string.b.string
300 string.b.string
到目前为止,我对 gsub() 或 readr::parse_number() 的所有尝试都惨遭失败,因为我只是不明白这些 gsub() 函数的语法。我通常失败了,因为“。”在变量中重复...
非常感谢任何帮助,谢谢!
您可以使用 tidyr::extract
:
tidyr::extract(df, V1, c('Variable', 'Id'), '(.*?)(\d+)', convert = TRUE)
# Variable Id
#1 string.b.string. 1
#2 string.b.string. 2
#3 string.b.string. 3
#4 string.b.string. 10
#5 string.b.string. 300
数据
df <- structure(list(V1 = c("string.b.string.1.", "string.b.string.2.",
"string.b.string.3.", "string.b.string.10.", "string.b.string.300."
)), class = "data.frame", row.names = c(NA, -5L))
您可以使用 base 的 strcapture
。
strcapture("(.*)\.(\d+)", df$V1,
data.frame(Variable=character(), Id=integer()))
# Variable Id
#1 string.b.string 1
#2 string.b.string 2
#3 string.b.string 3
#4 string.b.string 10
#5 string.b.string 300
使用base R
read.csv(text = sub("(.*)\.(\d+)\.$", "\1,\2", df$V1), header = FALSE,
col.names = c('Variable', 'Id'))
-输出
# Variable Id
#1 string.b.string 1
#2 string.b.string 2
#3 string.b.string 3
#4 string.b.string 10
#5 string.b.string 300