我想使用行为数据来计算捕获的项目数。这是我的示例数据:
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/