我有多个包含数据字符串的列。
(数据$ 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
答案 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