正则表达式循环,在数据框中创建变量

时间:2019-05-06 23:57:00

标签: r regex loops

我在一个数据框架(doc_id和事件描述)中有数千个文本文档,还有一个列表,其中包含我需要与数据框架中的文本字段匹配的数百个文本。在每个文档中的每个表达式匹配之后,我需要在数据框中为列表中的每个表达式创建新列。

这是我的数据的表示形式

    location @api-postgres-pgadmin {
            # adjust the next line, removing port 8080, port 80 is the default for http
            proxy_pass http://api-postgres-pgadmin;
            add_header X-Frame-Options "SAMEORIGIN" always;
            add_header X-XSS-Protection "1; mode=block" always;
            add_header X-Content-Type-Options "nosniff" always;
            add_header Referrer-Policy "no-referrer-when-downgrade" always;
            add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
            # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
            # enable strict transport security only if you understand the implications
    }

列表将

doc_id <- c("doc1","doc2","doc3","doc4","doc5","doc6","doc7")
event_desc <- c("yesterday I ate meat", "yesterday I ate tuna", "yesterday I ate chicken", "yesterday I ate tuna", "yesterday I ate meat", "yesterday I ate tuna", "yesterday I ate chicken") 
mydata <- data.frame(doc_id,event_desc)

在个人级别(一次创建1列),我使用正则表达式(字符串库)查找匹配项,然后创建该列。

reg.ex.list <- list("pattern1" = "ate meat", "pattern2" = "ate tuna", "pattern3" = "ate chicken")

当然,这不能扩展成数百个文本,所以(失败)我尝试了下面的循环来做两件事:

  1. 创建列(并显示与我的正则表达式匹配的文档)
  2. 使用我的正则表达式作为列名创建列

    为(reg.ex.list中的i){   nam <-paste(mydata,i,sep =“ _”)   分配(nam,str_extract_all(mydata $ event_desc,i))}

regex方法可能看起来很奇怪,但我需要跟踪哪些表达式与哪些文档匹配,以便以后使用regex作为键来带来更多数据。

预期结果是一个数据框,其中包含我的所有文档,每个正则表达式旁边都有一列。

enter image description here

0 个答案:

没有答案