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 を複数の列で動作させ、新しい文字列を 1 つの列に配置する方法はありますか?

以下を調べましたが、役に立ちませんでした。助けてくれてありがとう。

R ベクトルを 1 要素の文字列ベクトルに変換

R の正規表現 - ある列を別の列と比較する

正規表現を使用してRデータフレームの行を選択する

4

1 に答える 1

0

わかった。これは完全なハックですが、最終的な出力をリストではなくベクトルにしたいと思います(apply、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)

次に、すべてのベクトルを 1 つの大きなベクトルに貼り付けます (以降の操作では、'character(0)' は無視されます)。

data$Material <-paste(mat1,mat2,mat3,mat4)

次に、このベクトルを使用して、data$Material 内の特定のテキスト文字列の発生に基づいて、data$price の平均を計算できます。

于 2013-10-24T08:12:01.233 に答える