R 选择分组变量的子集
我使用的数据可以找到(“sq.txt”文件) 以下是数据摘要:R 选择分组变量的子集,r,dplyr,grouping,subset,R,Dplyr,Grouping,Subset,我使用的数据可以找到(“sq.txt”文件) 以下是数据摘要: > summary(sq) behaviour date squirrel time resting :983 2017-06-28: 197 22995 : 127 09:30:00: 17 travelling :649 2017-06-26: 160 22758 : 116 08:00:00: 16
> summary(sq)
behaviour date squirrel time
resting :983 2017-06-28: 197 22995 : 127 09:30:00: 17
travelling :649 2017-06-26: 160 22758 : 116 08:00:00: 16
feeding :344 2017-06-30: 139 23080 : 108 16:25:00: 15
OOS :330 2017-07-18: 110 23089 : 100 08:11:00: 13
vocalization:246 2017-06-27: 99 23079 : 97 08:31:00: 13
social : 53 2017-06-29: 96 22865 : 95 15:24:00: 13
(Other) : 67 (Other) :1871 (Other):2029 (Other) :2585
每个松鼠
都有许多观察结果,这些观察结果对应于许多不同的行为(行为
)
例如,squirrel
22995被观察127次。这127项观察对应于不同的行为
类别:7项喂养
、1项领土
、55项休息
,等等。然后我需要将每项行为的数量除以观察总数(即,喂食
=7/127、领地
=1/127、休息
=55/127等)以获得做每种行为所花费的时间比例
我已经使用dplyr
软件包通过squirrel
对我的观察结果进行了分组
有没有一种方法,我可以使用dplyr
,计算一列的比例(行为
)基于一列的总观察值(松鼠
),其中的值已经分组了?类似的内容
sq %>%
count(squirrel, behaviour) %>%
group_by(squirrel) %>%
mutate(p = n/sum(n)) %>%
# add this line to see result for squirrel 22995
filter(squirrel == 22995)
# A tibble: 8 x 4
# Groups: squirrel [1]
squirrel behaviour n p
<int> <chr> <int> <dbl>
1 22995 feeding 7 0.0551
2 22995 nest_building 4 0.0315
3 22995 OOS 9 0.0709
4 22995 resting 55 0.433
5 22995 social 6 0.0472
6 22995 territorial 1 0.00787
7 22995 travelling 32 0.252
8 22995 vocalization 13 0.102
哇!是的。但是,有没有办法让0个观察值的行为也按比例显示出来?就我而言,0也是有意义的。还有一个愚蠢的后续问题:为什么所有其他列(date
和time
)都显示出来之后被删除?回答第二个问题:只需自行运行count
,看看会发生什么:)基本上与group\u by
相同,后面跟着摘要。编辑以回答第一个问题。谢谢!这正是我一直想做的。
library(dplyr)
library(tidyr)
sq %>%
count(squirrel, behaviour) %>%
complete(squirrel, behaviour) %>%
group_by(squirrel) %>%
mutate(p = n/sum(n, na.rm = TRUE)) %>%
replace_na(list(n = 0, p = 0)) %>%
filter(squirrel == 22995)
# A tibble: 11 x 4
# Groups: squirrel [1]
squirrel behaviour n p
<int> <chr> <dbl> <dbl>
1 22995 dead 0 0
2 22995 feeding 7.00 0.0551
3 22995 grooming 0 0
4 22995 nest_building 4.00 0.0315
5 22995 OOS 9.00 0.0709
6 22995 resting 55.0 0.433
7 22995 social 6.00 0.0472
8 22995 territorial 1.00 0.00787
9 22995 travelling 32.0 0.252
10 22995 vigilant 0 0
11 22995 vocalization 13.0 0.102