これは非常に単純な質問かもしれませんが、R を学ぶためにオンラインや本で答えを見つけることはできません。
既存の行列のベクトルの値に基づいて名前が付けられた変数を持つテーブルを作成しようとしています。これは、変数名が表示される場所で使用しているテーブル (「しきい値」という名前) にベクトルまたは関心がどのように表示されるかの例です。
varname threshold_1_name threshold_1_value
1 BMXBMI high 25
2 BMXCALF low 40
3 BMXHT high 180
4 BMXLEG low 40
5 BMXSUB high 32
6 BMXTHICR high 65
テーブルには 81 個のレコードがあり、次のようなことをしたいと考えています。
for (i in 1:81) {
varname1 <- paste(thresholds$varname[i], thresholds$threshold_1_name[i], sep = "_")
newtable$[varname1] <- ifelse((bigTable$[thresholds$varname[i]] < thresholds$threshold_1_value[i]),1,0)
}
これにより、最初の 6 つの列の名前が BMXBMI_high、BMXCALF_low、BMXHT_high、BMXLEG_low、BMXSUB_high、BMXTHICR_high という名前の 81 個の列を持つ「newtable」が作成されます。私の ifelse ステートメントは問題ないようです。ループの外でテストしたところ、うまくいきました。変数名の作成に間違った構文を使用していると思います。
私が何をすべきか、またはどのように答えを探すべきかについてのアドバイスは大歓迎です。答えが見つからないのは、間違った語彙/検索用語を使用しているためだと思います。ありがとう!
@Ben-あなたが予測したように、ifelse行に問題はありません。ここに bigTable のサンプルがあります (上記の「しきい値」のサンプルに列を追加しました)。そこで問題を分類する方法についてアドバイスを提供するのに役立ちます。bigTable の値が 'thresholds' の値を上回っているか下回っているかに応じて、新しい変数の値を 0/1 としてコーディングしようとしています。
bigTable のサンプル:
BMXHT BMXBMI BMXLEG BMXCALF BMXWAIST BMXTHICR BMXTRI BMXSUB
1 174.0 24.90 NA 37.5 98.0 NA 12.8 20.4
2 178.3 29.10 45.2 42.6 99.9 56.2 17.4 38.6
3 162.0 22.56 39.7 34.0 81.6 47.0 20.3 16.8
4 162.9 29.39 43.0 37.2 90.7 55.7 26.4 34.2
5 190.1 30.94 46.6 43.7 108.0 64.0 15.5 26.6
6 180.0 30.62 46.0 40.5 112.8 57.1 26.2 NA
すべてを 1 行でコーディングしようとすると、コードが最初のエントリしか読み取っていないというエラーが表示され続けるので、次のコード セグメントを試していますが、これは非常に非効率的であり、まだ機能していません (最初の 2 行は以前に送信したものです)-
varname1 <- paste(thresholds$varname, thresholds$threshold_1_name, sep = "_")
bigTable[varname1[1:5]] <- NA
for (i in 1:5) {
value <- thresholds$threshold_1_value[i]
var <- thresholds$varname[i]
newvar <- varname1[i]
for(j in 1:10) {
if(bigTable[var[j]] > value) {bigTable[newvar] = 1}
else if (bigTable[var[j]] <= value) {bigTable[newvar] = 0}
}
}
繰り返しますが、あなたが提供できるどんな助けも大歓迎です!