我的数据如下
空闲|空闲|空闲|空闲|空闲|空闲|空闲
空闲| 56 | 55 | 49 | 50 | 53 | 48 | 54 | 52 |空闲|空闲|空闲|空闲|空闲|空闲 空闲| 49 | 51 | 48 | 50 | 50 | 49 | 50 | 57 | 56 | 57 | 56 |空闲|空闲| 69 | 86 | 65 |空闲|空闲|空闲|空闲
我想提取两者之间的数字(这是ASCII格式的电话号码)
(56 | 55 | 49 | 50 | 53 | 48 | 54 | 52 for 2nd line and 49 | 51 | 48 | 50 | 50 | 49 | 50 | 57 | 56 | 57 | 56 for 3rd line ),
将它们转换为“0和9”之间的数字,并在新列中作为字符串/数字连接为同一数据集中的phone_number。
第二行新列应为871230652,第三行应为13022129898
在ASCII格式中,48代表0,57代表9
请帮忙
谢谢,
答案 0 :(得分:0)
这是一种使用正则表达式的方法:
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")