从数据框中提取所有8位数字

时间:2019-10-09 10:06:50

标签: r regex dataframe

我有这个作业,我需要从文本文件中提取所有8位数字。我已经将文本文件转换为数据框,现在有67列18000行。也有空单元格。

在此表中,存在一些我要提取的8位数字(不在任何特定的行或列中)。

我需要将所有这些数字提取到一列中,而不检查重复项。

到目前为止,我编写的唯一代码是:

data <- read.delim("cerupload_adsi_1_01-02-2019.txt", header = FALSE, sep="|")

3 个答案:

答案 0 :(得分:1)

您可以使用regmatches()并将正则表达式"\\d{8}"与8位数字并列匹配。指定单词边界"\\b"可能会使其更健壮。

示例

txt <- "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 
tempor invidunt ut labore et dolore 235462354 magna aliquyam erat, sed diam voluptua. At 
vero eos et accusam et justo duo dolores et ea rebum. Stet clita 235 kasd gubergren, no sea 
takimata sanctus est Lorem ipsum dolor sit amet. 12345678 Lorem ipsum dolor 345.454 sit amet, 
12345678 consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam 345 voluptua. At vero eos et accusam et justo duo
dolores et ea rebum. Stet clita 12345.67 12345.678 kasd gubergren, no sea takimata sanctus 
est Lorem ipsum dolor sit amet. 12345678"

regmatches(txt, gregexpr("\\b\\d{8}\\b", txt))
# [[1]]
# [1] "12345678" "12345678" "12345678"

答案 1 :(得分:1)

首先,将所有数据放入一个简单的整数向量中:

data = as.integer(unlist(data))

下一步,删除所有不可转换为整数的元素(可选):

data = data[!is.na(data)]

接下来,找到8个字符长的整数:

data = data[nchar(as.character(data))==8]

然后,以整数向量为列,创建一个data.frame:

data = data.frame(x=data)

答案 2 :(得分:0)

使用str_extract_all中的stringr

temp <- data.frame(col = unlist(stringr::str_extract_all(unlist(data), "\\d{8}$")))
temp

#       col
#1 12352318
#2 98765432

数据

使用两列对此示例数据进行了测试。

data <- data.frame(a = "This is a text with number 1234 and 12352318", 
                   b = "More random text 123456789 98765432")