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

时间:2014-10-11 17:40:03

标签: 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时添加观察值,并且要添加的观察值需要满足条件:

  1. 如果post = 0,则添加的观察值为post value = 1

  2. 如果post = 1,则添加的观察值为post value = 0

  3. 所有添加的观察结果都有频率= 0

  4. 添加观察后,将“旧”和“新”障碍物的计数更改为2。

  5. 所以输出应该是这样的:

    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
    

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

1 个答案:

答案 0 :(得分: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