1

「値」と呼ばれるデータフレームにいくつかの値があります

すなわち:

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(["")

[] ブラケットがないと機能しません。

修正は大歓迎です、どうもありがとう

4

1 に答える 1

1

「値」と「フラグ」のdata.framesの次元と列の順序が同じ場合

values[flags == 1] <- NA
于 2012-06-24T14:47:40.107 に答える