样本数据框
grp = c(1,1,1, 1,1,2,2,2,2,2, 2,2)
val = c(2,1,5,NA,3,NA,1)
dta = data.frame(grp=grp, val=val)
结果应如下所示:
# The max number of count is 3
grp count
1 3
1 2
2 3
2 3
2 1
答案 0 :(得分:2)
这是base R
的一种方式。我们首先使用rle
计算重复的度量。然后使用将3
与除法的其余部分组合在一起的自定义函数。最后,我们结合起来形成一个新的数据框架:
grp = c(1,1,1, 1,1,2,2,2,2,2,2,2)
fun3 <- function(x) c(rep(3, floor(x/3)), x %% 3)
len <- rle(grp)$lengths
ans <- lapply(len, fun3)
cbind.data.frame(grp=rep(unique(grp), lengths(ans)), count=unlist(ans))
# grp count
# 1 1 3
# 2 1 2
# 3 2 3
# 4 2 3
# 5 2 1