2017-06-02 5 views
0

2つの数値セットを含む文字列変数を持つデータフレームがあります。ある数字を次の数字で掛け、結果を別の項目に割り当てる必要があります。これは正規表現では簡単ですが、いくつかの観測には計算が必要な複数の入力が含まれているので、乗算する追加の対がなくなるまでこれらの文字列を繰り返し処理する方法を考えるのは難しいです。そして、すべてのペアが乗算されたら、それらを追加して新しい変数に割り当てる必要があります。ここで可変入力の文字列からの算術

私はすぐに、次の複数の整数をしたいと思い、私の生データ

V1 <- c("ABC01-3XYZ=2, ABC04-5XYZ=3, ABC06-7XYZ=1", 
     "ABC04-5XYZ=2", "ABC01-3XYZ=1, ABC04-5XYZ=1") 
df <- data.frame(V1) 

            V1 
1 ABC01-3XYZ=2, ABC04-5XYZ=3, ABC06-7XYZ=1 
2        ABC04-5XYZ=2 
3    ABC01-3XYZ=1, ABC04-5XYZ=1 

ある - 最終的な結果に見えるように、すぐに「=」以下の整数で、かつ、それらを合計「」このように:

         V1 V2 
1 ABC01-3XYZ=2, ABC04-5XYZ=3, ABC06-7XYZ=1 28 
2        ABC04-5XYZ=2 10 
3    ABC01-3XYZ=1, ABC04-5XYZ=1 8 

各カンマを繰り返し処理する方法についてのご意見をお待ちしております。ありがとう!

+0

は – Masoud

+0

はあなたが展開することができます '、'によってそれらを分割しましたそれ?実際に複数の列に分割しようとしましたが、関数を適用する列の数が定義されていないため、必要な乗算と加算が適用されません。 –

+0

私は列を意味しませんでした。それらを分割してリストとして保存し、各行にいくつのレコードを保存し、何らかの情報を保存します。とにかく、ラミアの答えは、私が提案したものよりずっとスマートです。 – Masoud

答えて

1

あなたはstringrパッケージからstr_match_allを使用して、あなたがsapplyを使用したい部分にアクセスできます。

library(stringr) 
l = lapply(df$V1,function(x) str_match_all(x,c("-(\\d+)","=(\\d+)"))) 
df$V2 = sapply(l,function(x) sum(as.numeric(x[[2]][,2])*as.numeric(x[[1]][,2]))) 

をこれが返されます。

[1] 28 10 8 
+0

完璧!ありがとう。 –

関連する問題