2014-10-11 59 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

相关问题