我有一个这样的数据框:
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 value = 1
如果post = 1,则添加的观察值为post value = 0
所有添加的观察结果都有频率= 0
添加观察后,将“旧”和“新”障碍物的计数更改为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
作为R新手编程似乎相当复杂。非常感谢。
答案 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