R分组选择带有限制的行

时间:2016-08-21 11:08:19

标签: r

样本数据框

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

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