我想使用行为数据来计算捕获的项目数。这是我的示例数据:

df <- data.frame(id = as.factor(c(51,51,51,51,51,51,51,52,52,52,52,52,52)),
             type = c("(K)","(K)","(K)","(K)","","","","(K)","(K)","","(K)","","(K)"))


我想根据我的每个“ K”是否连续来计算。如果是连续的,则字符串应计为1。如果两者之间有差距,则它们都应计为一个..因此最终计数将为2。

希望有道理...对于上面的示例,我希望最终输出数据看起来像这样

id type tally
1 51  (K)     1
2 52  (K)     3


我认为聚合可能会执行此操作,但是它会计算一列中的总数,因此对于51 tally = 4而不是1

任何帮助,将不胜感激

谢谢
恩典

最佳答案

基数R中的rle命令将很有用。

temp<- tapply(df$type, df$id, function(x) rle(x == "(K)"))
df.new<- data.frame(id = names(temp),
                tally = unlist(lapply(temp, function(x) sum(x$values))))

关于r - 列中的计数值使用空单元格指示新数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43714125/

10-12 20:00