3

data_active任意のデータセットです。

理想的には、条件が満たされたときに値を変更する必要があります。しかし、このコードを実行すると、指定された各列の値がifステートメントで指定された値に変更されます。

for (i in 1:nrow(data_active))
{
 if(data_active[i,1]==4866)
 {
  data_active$St="MH" 
  data_active$Reg="South Central" 
  data_active$REGION="South"
  data_active$Market="86"
 }
}
4

4 に答える 4

6

「R で考える」という考え方に慣れる必要があります。for ループや if ステートメントは必要ありません。たった 1 行のコードでこれを行うことができます。

以下を試してください(idを列名に置き換えてください):

data_active[data_active$id == 4866,c("St","Reg","REGION","Market")] <- c("MH","South Central", "SOUTH", "86")

まず、このステートメントは、id が 4866 に一致する行を見つけ、それらから c によって作成されたリストの列を選択します。

data_active[data_active$id == 4866,c("St","Reg","REGION","Market")]

次に、これらの列の値を、必要な値を含む新しいリストに設定します。

<- c("MH","South Central", "SOUTH", "86")
于 2012-08-08T15:38:14.677 に答える
3

ステートメント内で、ifで示された行だけでなく、列全体に値を割り当てましたi。特定の行だけに割り当てるには、ベクトルのその要素だけに割り当てる必要があります。

for (i in 1:nrow(data_active))
{
 if(data_active[i,1]==4866)
 {
  data_active$St[i]="MH" 
  data_active$Reg[i]="South Central" 
  data_active$REGION[i]="South"
  data_active$Market[i]="86"
 }
}

とはいえ、これはでこれを行うための慣用的な方法ではありませんR。より自然なのは、論理インデックスを使用することです。

data_active$St[data_active[,1]==4866]="MH" 
data_active$Reg[data_active[,1]==4866]="South Central" 
data_active$REGION[data_active[,1]==4866]="South"
data_active$Market[data_active[,1]==4866]="86"
于 2012-08-08T15:34:16.073 に答える
2

変更する行の値を指定する必要があります。それ以外の場合は、すべての行に毎回新しい値が与えられますdata_active[i,1]==4866

これを試して:

for (i in 1:nrow(data_active))
{
 if(data_active[i,1]==4866)
 {
  data_active$St[i]="MH" 
  data_active$Reg[i]="South Central" 
  data_active$REGION[i]="South"
  data_active$Market[i]="86"
 }
}
于 2012-08-08T15:33:36.583 に答える
1

Ina ソリューションとほぼ同じですが、異なるタイプの列でも機能します (Brian Diggs の Ina ソリューションへのコメントを参照)。

data_active[data_active$id == 4866,
            c("St","Reg","REGION","Market")] <- list("MH","South Central", "SOUTH", "86")
于 2012-08-08T17:03:47.730 に答える