2つの他の列(最大と最小の列)に基づいて選択する必要がある4列の値(V1〜V4列)のデータフレーム(df)があります。私の目標は、行ごとに最大と最小の列で設定された範囲外の値にNAsを割り当て、残りの値の平均を計算することです。R:行範囲に基づいて行の値を選択
V1 V2 V3 V4 max min
1 3 6 8 7 5
23 30 5 17 30 16
予想される出力は次のようになります。
これまでV1 V2 V3 V4 max min mean
NA NA 6 NA 7 5 6
23 30 NA 17 30 16 35
が、私は唯一のNASに割り当てるには、以下のスクリプトを使用してこれを行うことができます...
df$V1 <- ifelse(df$V1 > df$max | df$V1 < df$min, NA, df$V1)
df$V2 <- ifelse(df$V2 > df$max | df$V2 < df$min, NA, df$V2)
df$V3 <- ifelse(df$V3 > df$max | df$V3 < df$min, NA, df$V3)
df$V4 <- ifelse(df$V4 > df$max | df$V4 < df$min, NA, df$V4)
...そして平均値を計算するには、次
df$mean <- rowMeans(df[, 1:4], na.rm = TRUE)
の問題は、実際のデータの列数4よりもはるかに大きくなり、このメソッドはあまりにも多くの繰り返しを必要とするようです。 Rでこれを行うより良い方法はありますか?私はその後、成功せずapply
機能を使用するために有効な値をサブセットするdata.table
を使用してみましたが
:
df <- df[df[,1:4] <= df$max | df[,1:4] >= df$min, ]
apply(df[,1:4], 1, function(x) mean(x))
ありがとうございました。
ルックを返します。返信いただきありがとうございます。 – coffeinjunky