R:gregexpr跨多个列并返回单个向量

时间:2013-10-22 17:24:26

标签: regex r text-mining lapply

我有多个包含数据字符串的列。

(数据$ product,data $ price,data $ overview1,data $ overview2,data $ overview3,data $ overview4)

我想创建一个新的向量,它只包含以字符串“Material:”

开头的字符串

设置GREP模式

    matpattern <- "((?<=Material: ).*|(?<=Materials: ).*)"

获取开头有材料的字符串

    mat <- gregexpr(matpattern, data$Overview1, perl=TRUE)

创建矢量以存储字符串

     data$material1 <- regmatches(data$Overview1, mat, invert = FALSE)

/ 重复概述2 /

    mat <- gregexpr(matpattern, data$Overview2, perl=TRUE)

    data$material2 <- regmatches(data$Overview2, mat, invert = FALSE)

声明

    z <- cbind(material1, material2) 
当我想要一个列表时,

给出一个矩阵

有没有办法获得lapply&amp; gregexpr跨多个列工作,然后将新字符串放在一个列中?

我看了下面,但没有用,谢谢你的帮助。

Convert R vector to string vector of 1 element

Regular Expressions in R - compare one column to another

Using regexp to select rows in R dataframe

1 个答案:

答案 0 :(得分:0)

行。 这是一个完整的黑客,但我希望最终输出是一个向量,而不是一个列表(排除适用,lapply?)

这将获得4列

中所需字符串的位置和长度
  

m1&lt; - gregexpr(matpattern,data [,c(“Overview1”)],perl = TRUE)

     

m2&lt; - gregexpr(matpattern,data [,c(“Overview2”)],perl = TRUE)

     

m3&lt; - gregexpr(matpattern,data [,c(“Overview3”)],perl = TRUE)

     

m4&lt; - gregexpr(matpattern,data [,c(“Overview4”)],perl = TRUE)

此操作会创建一组向量

  

mat1&lt; - regmatches(data [,c(“Overview1”)],m1,invert = FALSE)

     

mat2&lt; - regmatches(data [,c(“Overview2”)],m2,invert = FALSE)

     

mat3&lt; - regmatches(data [,c(“Overview3”)],m3,invert = FALSE)

     

mat4&lt; - regmatches(data [,c(“Overview4”)],m4,invert = FALSE)

然后我将所有向量粘贴到一个大的向量中(将来的操作将忽略'character(0)')

  

data $ Material&lt; -paste(mat1,mat2,mat3,mat4)

然后,我可以使用此向量根据数据中某些文本字符串的出现来计算数据$ price的平均值$ Material