从R中的不一致字符串中提取数字
Extracting number from a non-consistent string in R
我的数据如下
空闲|空闲|空闲|空闲|空闲|空闲|空闲
空闲|56|55|49|50|53|48|54|52|空闲|空闲|空闲|空闲|空闲|空闲
空闲|49|51|48|50|50|49|50|57|56|57|56|空闲|空闲|69|86|65|空闲|空闲|空闲|空闲
我想提取中间的数字(这是 phone ASCII 格式的数字)是
(56|55|49|50|53|48|54|52 第二行和 49|51|48|50|50|49|50|57|56|57|第 3 行 56),
将它们转换为“0 和 9”之间的数字,并在新列中连接为 string/number,在同一数据集中连接为 phone_number。
新列的第 2 行应为 871230652,第 3 行应为 13022129898
在ASCII格式中48代表0,57代表9
请帮忙
谢谢,
这是一种使用正则表达式的方法:
res <- sapply(regmatches(x, gregexpr("^(?:Idle\|)*\K\d+(?=\|)|\G(?!^)\|\K\d+",
x, perl = TRUE)),
function(x) paste(as.integer(x) - 48, collapse = ""))
# [1] "" "87125064" "13022129898"
如果要排除空字符串,可以使用以下命令:
res[as.logical(nchar(res))]
# [1] "87125064" "13022129898"
这里 x
是这个向量:
x <- c("Idle|Idle|Idle|Idle|Idle|Idle|Idle",
"Idle|56|55|49|50|53|48|54|52|Idle|Idle|Idle|Idle|Idle|Idle",
"Idle|49|51|48|50|50|49|50|57|56|57|56|Idle|Idle|69|86|65|Idle|Idle|Idle|Idle")
我的数据如下
空闲|空闲|空闲|空闲|空闲|空闲|空闲
空闲|56|55|49|50|53|48|54|52|空闲|空闲|空闲|空闲|空闲|空闲 空闲|49|51|48|50|50|49|50|57|56|57|56|空闲|空闲|69|86|65|空闲|空闲|空闲|空闲
我想提取中间的数字(这是 phone ASCII 格式的数字)是
(56|55|49|50|53|48|54|52 第二行和 49|51|48|50|50|49|50|57|56|57|第 3 行 56),
将它们转换为“0 和 9”之间的数字,并在新列中连接为 string/number,在同一数据集中连接为 phone_number。
新列的第 2 行应为 871230652,第 3 行应为 13022129898
在ASCII格式中48代表0,57代表9
请帮忙
谢谢,
这是一种使用正则表达式的方法:
res <- sapply(regmatches(x, gregexpr("^(?:Idle\|)*\K\d+(?=\|)|\G(?!^)\|\K\d+",
x, perl = TRUE)),
function(x) paste(as.integer(x) - 48, collapse = ""))
# [1] "" "87125064" "13022129898"
如果要排除空字符串,可以使用以下命令:
res[as.logical(nchar(res))]
# [1] "87125064" "13022129898"
这里 x
是这个向量:
x <- c("Idle|Idle|Idle|Idle|Idle|Idle|Idle",
"Idle|56|55|49|50|53|48|54|52|Idle|Idle|Idle|Idle|Idle|Idle",
"Idle|49|51|48|50|50|49|50|57|56|57|56|Idle|Idle|69|86|65|Idle|Idle|Idle|Idle")