从文本中删除数字:R

时间:2018-05-07 09:44:00

标签: r regex

你好我有数据集,包括文本,整数和十进制数,文本是一个段落,将有所有这些混合,试图从文本内容中删除整数和十进制数,那里是大约30k的特罗条目。

输入数据格式:

  1. 此。是一个很好的13部分。 135.67代码
  2. 如何在内容6879中删除66.8
  3. 从中获取数字3475.5。数据。这个369426中的879
  4. 输出:

    1. 13 135.67
    2. 66.8 6879
    3. 3475.5 879 369426
    4. 我尝试逐个替换所有字母,但26 + 26替换所有使代码冗长,并替换“。”替换“。”从数字也 谢谢, 普利文

5 个答案:

答案 0 :(得分:1)

你可以尝试

library(stringr)
lapply(str_extract_all(a, "[0-9.]+"), function(x) as.numeric(x)[!is.na(as.numeric(x))])
[[1]]
[1]  13.00 135.67

[[2]]
[1]   66.8 6879.0

[[3]]
[1]   3475.5    879.0 369426.0

基本想法来自here,但我们包含.lapply转换为数字并排除NA

数据:

a <- c("This. Is a good 13 part. of 135.67 code",
       "how to strip 66.8 in the content 6879",
       "get the numbers 3475.5 from. The data. 879 in this 369426")

答案 1 :(得分:1)

不要忘记R已经内置了正则表达式函数:

input <- c('This. Is a good 13 part. of 135.67 code', 'how to strip 66.8 in the content 6879',
           'get the numbers 3475.5 from. The data. 879 in this 369426')

m <- gregexpr('\\b\\d+(?:\\.\\d+)?\\b', input)
(output <- lapply(regmatches(input, m), as.numeric))

这会产生

[[1]]
[1]  13.00 135.67

[[2]]
[1]   66.8 6879.0

[[3]]
[1]   3475.5    879.0 369426.0

答案 2 :(得分:1)

使用strsplit拆分的选项,然后使用gsub替换[:alpha].之后的[:alpha]

text <- "1. This. Is a good 13 part. of 135.67 code
2. how to strip 66.8 in the content 6879
3. get the numbers 3475.5 from. The data. 879 in this 369426"

lines <- strsplit(text, split = "\n")[[1]]
gsub("[[:alpha:]]+\\.|[[:alpha:]]+\\s*","",lines)
#[1] "1.  13  135.67 "       
#[2] "2. 66.8 6879"          
#[3] "3. 3475.5   879 369426"

答案 3 :(得分:1)

使用gsub的另一种方法:

string = c('This. Is a good 13 part. of 135.67 code', 
           'how to strip 66.8 in the content 6879',
           'get the numbers 3475.5 from. The data. 879 in this 369426')

trimws(gsub('[\\p{L}\\.\\s](?!\\d)+', '', string, perl = TRUE))
# [1] "13 135.67"         "66.8 6879"         "3475.5 879 369426"

答案 4 :(得分:0)

没有正则表达式和外部包的解决方案:

sapply(
  strsplit(input, " "),
  function(x) {
    x <- suppressWarnings(as.numeric(x))
    paste(x[!is.na(x)], collapse = " ")
  }
)
[1] "13 135.67"         "66.8 6879"         "3475.5 879 369426"