0

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

(data$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 和 gregexpr 跨多个列工作,然后将新字符串放在一个列中?

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

将 R 向量转换为 1 个元素的字符串向量

R中的正则表达式 - 将一列与另一列进行比较

使用正则表达式选择 R 数据框中的行

4

1 回答 1

0

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

这将获取 4 列中所需字符串的位置和长度

m1 <- gregexpr(matpattern, data[ ,c("Overview1")], perl=TRUE)

m2 <- gregexpr(matpattern, data[ ,c("Overview2")], perl=TRUE)

m3 <- gregexpr(matpattern, data[ ,c("Overview3")], perl=TRUE)

m4 <- gregexpr(matpattern, data[ ,c("Overview4")], perl=TRUE)

此操作创建一组向量

mat1 <- regmatches(data[ ,c("Overview1")], m1, invert = FALSE)

mat2 <- regmatches(data[ ,c("Overview2")], m2, invert = FALSE)

mat3 <- regmatches(data[ ,c("Overview3")], m3, invert = FALSE)

mat4 <- regmatches(data[ ,c("Overview4")], m4, invert = FALSE)

然后我将所有向量粘贴到一个大向量中(未来的操作将忽略“字符(0)”)

数据$材料<-粘贴(mat1,mat2,mat3,mat4)

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

于 2013-10-24T08:12:01.233 回答