2017-05-26 16 views
1

変数Jaehrlichkeitは基本的に3つのレベル、すなわちHQ30,HQ100,HQ300の要素です。私はRにJaehrlichkeitを読ませたい。 Jaehrlichkeit = HQ30の場合は、対応する行の列intHQ30の値をコピーし、新しく作成した列Intensitaetに貼り付けます。 HQ100HQ300についてこれを繰り返します。他の列の値に基づく列の追加

mutate機能とネストされたifelseの機能を組み合わせようとしましたが、エラーが発生し続けました。誰かが私を助けてくれますか?または、より簡単なソリューションを提案することができますか?

答えて

1

row/columnインデックス作成でこれを行うことができます。 'int'の後に 'HQ'が始まり、いくつかの数字(\\d+)がgrepを使用して始まる列の名前を取得します。次に、各行の列インデックスをmatchで 'Jaehrlichkeit'に 'v1'の部分文字列、cbindを行順で入力し、intHQ列から値を抽出し、それを割り当てて 'Intensitaet'

を作成します
v1 <- grep("^intHQ\\d+", names(sub1), value = TRUE) 
sub1$Intensitaet <- sub1[v1][cbind(1:nrow(sub1), 
      match(sub1$Jaehrlichkeit, sub("int", "", v1)))] 
+1

多くのありがとう。これはまさに私が必要としたことです。私はいくつかのユーザーが問題をいかに簡単に解決するかに魅了されています。 – Danka

+0

@Dankaご回答いただきありがとうございます。 [ここ](https://stackoverflow.com/help/someone-answers)もチェックすることができます。 – akrun

1

別のオプションは、分割、および適用、Jaehrlichkeit以来すなわち

do.call(rbind, lapply(split(df, df$Jaehrlichkeit), function(i) { 
         i$Intensitaet <- i[[grep(i$Jaehrlichkeit[1], names(i))]]; i 
                   })) 
0

ことであろうが、あなたがこのベクトル化を行うことができ、型因子である:

r <- sub1[,match(paste0("int", levels(sub1$Jaehrlichkeit)), names(sub1))] 
sub1$Intensitaet <- r[cbind(seq(nrow(r)), as.numeric(sub1$Jaehrlichkeit))] 
  • まず、levels(sub1$Jaehrlichkeit)の順でデータフレームの列intHQ100intHQ30intHQ300の値を取得します。
  • 次に、インデックスを生成してIntensitaet列を作成します。
関連する問題