Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 选择分组变量的子集_R_Dplyr_Grouping_Subset - Fatal编程技术网

R 选择分组变量的子集

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

我使用的数据可以找到(“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  
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