我正在尝试计算每对个体和观察日的不同情况。
我的数据看起来像这样
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
是观察日,av
和sumtime
是记录的活动。
我想要实现的是这个
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))