R - 独特计数变异

时间:2016-01-20 12:55:12

标签: r count distinct

我正在尝试计算每对个体和观察日的不同情况。

我的数据看起来像这样

       idno day av sumtime
1  103799_1   1  1     400
2  103799_1   1  5     130
3  103799_1   1  7      60
4  103799_1   4  1     410
5  103799_1   4  5      50
....

Idno是个人标识符,day是观察日,avsumtime是记录的活动。

我想要实现的是这个

      idno day av sumtime ndist
1 103799_1   1  1     400     2
2 103799_1   1  5     130     2
3 103799_1   1  7      60     2
4 103799_1   4  1     410     2
5 103799_1   4  5      50     2
...

我想计算个人观察的数量(idno)。因此,2表示在两天内观察到的每个idno

如果我只是这样做

dt %>% group_by(idno, day) %>% mutate(n())  

我得到了

        idno day av sumtime n()
1  103799_1   1  1     400   3
2  103799_1   1  5     130   3
3  103799_1   1  7      60   3
4  103799_1   4  1     410   3
5  103799_1   4  5      50   3

哪些不能正确计算不同案例的数量。

所以,我发现我能做到的唯一方法是做一个非常麻烦的操作:

dt %>% select(idno, day) %>% distinct() %>% group_by(idno) %>% 
mutate(ndist = n()) %>% merge(dt, .) 

你有什么想法,我怎么能更直接地做到这一点?没有合并的例子。

非常感谢你。

dt = structure(list(idno = c("103799_1", "103799_1", "103799_1", "103799_1", 
"103799_1", "103799_1", "103799_2", "103799_2", "103799_2", "103799_2", 
"110594_1", "129380_1", "129380_1", "129380_1", "129380_1", "129380_2", 
"129380_2", "129380_2", "129380_2", "129380_2", "129380_2", "140090_1", 
"140090_1", "140090_2", "140090_2", "155699_1", "155699_1", "155699_2", 
"155699_2", "201314_1"), day = c(1L, 1L, 1L, 4L, 4L, 4L, 1L, 
4L, 4L, 4L, 1L, 6L, 6L, 6L, 7L, 6L, 6L, 6L, 7L, 7L, 7L, 4L, 7L, 
4L, 7L, 1L, 2L, 1L, 2L, 5L), av = c(1L, 5L, 7L, 1L, 5L, 7L, 7L, 
1L, 5L, 7L, 7L, 1L, 5L, 7L, 5L, 1L, 5L, 7L, 1L, 5L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 1L), sumtime = c(400, 130, 60, 410, 50, 
40, 90, 470, 90, 20, 150, 270, 30, 90, 10, 490, 40, 60, 510, 
40, 20, 20, 60, 110, 110, 70, 40, 150, 10, 270)), class = "data.frame", .Names = c("idno", 
"day", "av", "sumtime"), row.names = c(NA, -30L))

0 个答案:

没有答案