例のコードのように、行変数に一致する列名に基づいてデータフレームセルの値を置き換えたいとします。ネストされたループがこれを行うための好ましい方法ではないことを知るには十分知っていますが(より効率的なソリューションはおそらく非常に簡単です)、きれいなベクトル化アプローチを理解することはできませんでした。私はネストされた適用、すなわち適用によって呼び出される関数の内部での適用を迷惑にしているが、成功していないし、最善の方法でもないようである。列名と変数の一致に基づいてデータフレームのセル値を置き換えます
入力:
test.df
Group G1 G2 G3
1 G1 0.63910462 0.5738143 0.97428347
2 G2 0.62578294 0.4653417 0.92010090
3 G3 0.01136336 0.3163722 0.20266664
4 G1 0.09054996 0.1984567 0.17488220
5 G2 0.74865266 0.9862222 0.80725355
6 G3 0.82855980 0.2668529 0.06786335
7 G1 0.74310410 0.8861169 0.44801963
8 G2 0.97329786 0.6682355 0.69658779
9 G3 0.68696020 0.7362139 0.77452962
出力:
test.df
Group G1 G2 G3
1 G1 NA 0.5738143 0.9742835
2 G2 0.62578294 NA 0.9201009
3 G3 0.01136336 0.3163722 NA
4 G1 NA 0.1984567 0.1748822
5 G2 0.74865266 NA 0.8072535
6 G3 0.82855980 0.2668529 NA
7 G1 NA 0.8861169 0.4480196
8 G2 0.97329786 NA 0.6965878
9 G3 0.68696020 0.7362139 NA
コード:
test.df <- data.frame("Group"=rep(c("G1", "G2", "G3"), 3), "G1"=runif(9, 0, 1), "G2"=runif(9, 0, 1), "G3" = runif(9,0,1))
for (j in 1:ncol(test.df)) {
for(i in 1:nrow(test.df)) {
if(colnames(test.df)[j] == test.df$Group[i]) {
test.df[i,j] <- NA
}
}
}
私は、私はそれらを交換、交換する必要が値を取得するためにdplyrフィルタを使用できると思います、データフレームを再構成しますが、私は他のオプションの学習に興味があります。
あなたのコードを正しく理解していることを確認するだけです。たとえば、行と列の名前が同じであるすべての値が削除されていますか? –