R:如果满足某些条件,则添加和修改观测值

R:如果满足某些条件,则添加和修改观测值,r,copy,dataframe,rows,R,Copy,Dataframe,Rows,我有这样一个数据框: nation post frequency count Australia 0 4 2 Australia 1 7 2 Brazil 0 1 1 Finland 1 1 1 我喜欢在count==1时添加观察值,要添加的观察值需要满足以下条件: 如果post=0,则添加的观测值的post值为1 如果post=1,则添加的

我有这样一个数据框:

nation      post   frequency count

Australia    0         4     2 
Australia    1         7     2 
Brazil       0         1     1 
Finland      1         1     1 
我喜欢在count==1时添加观察值,要添加的观察值需要满足以下条件:

  • 如果post=0,则添加的观测值的post值为1

  • 如果post=1,则添加的观测值的post值为0

  • 所有添加的观测值的频率均为0

  • 添加观测值后,将“旧”和“新”obs的计数更改为2

  • 因此,输出应该类似于:

    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
    

    作为一个新手编程似乎相当复杂。非常感谢

    可能有更好的方法,但这里有一个非常直观的
    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
    
    Reduce(rbind,Map)函数(x){
    如果(nrow(x)=1L){
    
    谢谢你,理查德。你救了我的命!!