37

私は次のようなデータセットを持っています

data<-c(0,1,2,3,4,2,3,1,4,3,2,4,0,1,2,0,2,1,2,0,4)
frame<-as.data.frame(data)

このデータフレーム内に新しい変数を作成したいと思います。列「data」が2以上の数を報告する場合、その行に「2」を含める必要があり、1または0(たとえば、最初の2つの観測値)がある場合は、新しい変数にその観察のための「1」。

私は次のコードを使用してこれを行おうとしています:

frame$twohouses<- if (any(frame$data>=2)) {frame$twohouses=2} else {frame$twohouses=1}

ただし、これらの3行のスクリプトを実行すると、「twohouses」列のすべての観測値は2でコード化されます。ただし、それらの多くは1でコード化する必要があります。

だから私の質問:else行またはスクリプトで何が間違っているのですか?または、これを行う別の方法はありますか。

私の質問はこれに似ています: Rの因子にifelseを使用する

しかし、誰もその質問に答えていません。

よろしくお願いします!

4

2 に答える 2

61

使用ifelse:

frame$twohouses <- ifelse(frame$data>=2, 2, 1)
frame
   data twohouses
1     0         1
2     1         1
3     2         2
4     3         2
5     4         2
...
16    0         1
17    2         2
18    1         1
19    2         2
20    0         1
21    4         2

ifとの違いifelse:

  • if単一の論理値を引数として取る制御フロー ステートメントです。
  • ifelseベクトル化された関数で、すべての引数としてベクトルを取ります。

if経由でアクセスできるのヘルプ ページに?"if"も、次の場所が表示されます。?ifelse

于 2012-08-08T13:11:47.323 に答える
3

これを試して

frame$twohouses <- ifelse(frame$data>1, 2, 1)
 frame
   data twohouses
1     0         1
2     1         1
3     2         2
4     3         2
5     4         2
6     2         2
7     3         2
8     1         1
9     4         2
10    3         2
11    2         2
12    4         2
13    0         1
14    1         1
15    2         2
16    0         1
17    2         2
18    1         1
19    2         2
20    0         1
21    4         2
于 2012-08-08T13:11:50.160 に答える