2014-10-11 62 views
0

我有這樣一個數據幀:R:添加和修改觀察它是否滿足某些條件

nation  post frequency count 

Australia 0   4  2 
Australia 1   7  2 
Brazil  0   1  1 
Finland  1   1  1 

我喜歡什麼是添加意見,如果計數== 1,和觀察到是添加必要滿足以下條件:

  1. 如果交= 0,然後加入觀察具有交值= 1

  2. 如果交= 1,然後加入觀察具有交值= 0

  3. 所有添加的觀測具有頻率= 0

  4. 加入觀測後,改變計數爲2 「舊」 和 「新」 OBS。

所以輸出應該是這樣的:

nation  post frequency count 

Australia 0   4  2 
Australia 1   7  2 
Brazil  0   1  2 
Brazil  1   0  2 
Finland  1   1  2 
Finland  0   0  2 

似乎相當複雜編程爲A R新手。非常感謝。

回答

1

有可能更好的方法,但這裏有一個非常直觀的步驟if聲明。

Reduce(rbind, Map(function(x) { 
    if(nrow(x) == 1L) { 
     rb <- rbind(x, x) ## add a duplicate row 
     rb[2,2] <- !rb[1,2] ## change post to "opposite" of its original value 
     rb[2,3] <- 0L  ## change frequency to zero 
     rb$count <- 2L  ## change count to 2 
     rb 
    } else { 
     x 
    } 
}, split(df, df$nation))) 
#  nation post frequency count 
# 1 Australia 0   4  2 
# 2 Australia 1   7  2 
# 3  Brazil 0   1  2 
# 21 Brazil 1   0  2 
# 4 Finland 1   1  2 
# 22 Finland 0   0  2 
+0

謝謝,理查德。你救了我的命 !! – Yifei 2014-10-11 18:09:52