2014-03-01 38 views
0

我在舊數據框中添加了一個新變量(全零)。現在在這個新的數據框中,我必須將值從0更改爲1,以滿足條件的觀測值。條件在另一個變量上。有條件地更改數據幀中的值

例如,我在這個新的數據框中有變量x,y,zz是我剛剛添加的新變量,它們都是零。如果y=some number a,我想要z=1

我嘗試使用一個簡單的for循環來實現這一點,但我不知道我在哪裏做錯了。

for (i==999 in data$y) { 
    {data$z==1} 
} 

回答

2

好像你正在嘗試設置data$z爲1時data$y是999,並將其設置爲0,否則。

data$z = as.numeric(data$y == 999) 
2

,如果你給了我們一個reproducible example它會幫助:這可以實現。我不是創建一個:

df = data.frame(x = sample.int(5, 5), 
       y = sample.int(5, 5), 
       z = rep(0, 5)) 

df 
    x y z 
1 3 3 0 
2 4 5 0 
3 2 1 0 
4 5 4 0 
5 1 2 0 

你的問題說你試圖當y滿足某些條件改變df$z值。在R中,這樣做的一般方法是使用下標。我強烈推薦John Cook的博客文章5 Kinds of Subscripts in R來幫助理解這一點; R中的這些東西中的一種與大多數其他語言的工作方式不同,但是當你掌握它時,它變得非常方便。

因此,在這種情況下:

# where is y==1? 
df$y == 1 
[1] FALSE FALSE TRUE FALSE FALSE 

如果我們要設置的值,我們可以養活這導致邏輯載體到表達的行索引像df[row, column]

df[df$y == 1, ] 
    x y z 
3 2 1 0 

而「在該行中的「z」列是東西,只是類型

df[df$y == 1, "z"] = 999 
df 
    x y z 
1 3 3 0 
2 4 5 0 
3 2 1 999 
4 5 4 0 
5 1 2 0