「値」と呼ばれるデータフレームにいくつかの値があります
すなわち:
Sam Ned Ted Ann
500 430 57 212
410 265 69 341
189 554 153 457
236 311 590 271
50 568 234 442
そして、別のデータフレーム「フラグ」内のいくつかの品質管理フラグ
Sam$F Ned$F Ted$F Ann$F
1 1 1 0
0 0 1 0
0 0 1 0
0 0 0 0
0 0 1 0
flags の同等のエントリが 1 の場合、つまり次のようになる場合、「values」の数値を NA に置き換えたいと思います。
Sam Ned Ted Ann
NA NA NA 212
410 265 NA 341
189 554 NA 457
236 311 590 271
50 568 NA 442
この質問は、R の data.frame で特定の値を置き換えるという質問と非常によく似ています。
これは、「テーブルのマージ」ソリューションでうまく解決されました。
ただし、これを実行するデータ列は 1 つだけではありません。ただし、同じ「テーブルのマージ」ソリューションを機能させることができるはずです。
2 つのテーブルをマージする (そして 1 を NA に置き換える) には、以下を使用しました
F2 <-Flags
F2[F2 == "1"] <- "NA"
# Create identical column names for values and F2 for matching
samples <-colnames(Rvalues)
colnames(F2) <-samples
#Create an ID column for F2 and values
F2$ID <- c(1,2,3,4,5)
Rvalues$ID <- c(1,2,3,4,5)
out2 <- merge(Rvalues, F2, by = c("ID"), all.x = TRUE)
結果の out2 データフレームは次のとおりです。
ID Sam.x Ned.x Ted.x Ann.x Sam.y Ned.y Ted.y Ann.y
1 1 500 430 57 212 NA NA NA 0
2 2 410 265 69 341 0 0 NA 0
3 3 189 554 153 457 0 0 NA 0
4 4 236 311 590 271 0 0 0 0
5 5 50 568 234 442 0 0 NA 0
したがって、上記のリンクに (Chase によって) 投稿されたソリューションをループ内で使用して、各サンプルの列を調べたいと思います。
私は次のことを試しました:
for [i in samples]
{
out3 <- transform(out2, [i]$new = ifelse(is.na([i].x), [i].y, [i].x), [i].x = NULL, [i].y = NULL)}
動作していません(エラーメッセージ
"Error: unexpected '[' in:
"{
out3 <- transform(out2, newdata = ifelse(is.na(["")
[] ブラケットがないと機能しません。
修正は大歓迎です、どうもありがとう