如何解决按字符向量聚合
我正在尝试汇总我的数据(样本):
Julian_Date Week Site Color_Combo Singing Building Incubating nestlings Empty_nest
1 5 1 BV 1 0 0 0 0
2 21 3 BV 0 0 0 0 0
3 25 4 BV 1 1 0 0 0
4 32 5 BV NB/SI:NB/DG 0 0 0 0 0
5 32 5 BV NB/SI:NB/MV 0 0 0 0 0
6 32 5 BV NB/NB:NB/NB 0 0 0 0 0
7 32 5 BV NB/NB:NB/NB 0 0 0 0 0
8 33 5 BV NB/NB:NB/NB 0 0 0 0 0
9 33 5 BV NB/NB:NB/NB 0 0 0 0 0
10 33 5 BV NB/NB:NB/NB 0 0 0 0 0
11 33 5 BV NB/NB:NB/NB 0 0 0 0 0
12 33 5 BV NB/NB:NB/NB 0 0 0 0 0
13 33 5 BV NB/NB:NB/NB 0 0 0 0 0
14 33 5 BV NB/NB:NB/NB 0 0 0 0 0
15 33 5 BV NB/NB:NB/NB 0 0 0 0 0
16 33 5 BV NB/NB:NB/NB 0 0 0 0 0
17 33 5 BV NB/NB:NB/NB 0 0 0 0 0
18 34 5 BV NB/NB:NB/NB 0 0 0 0 0
19 34 5 BV NB/NB:NB/NB 0 0 0 0 0
20 35 5 BV NB/NB:NB/SI 0 0 0 0 0
21 35 5 BV NB/RD:NB/SI 0 0 0 0 0
22 35 5 BV NB/YE:NB/SI 0 0 0 0 0
23 35 5 BV NB/NB:NB/NB 0 0 0 0 0
24 35 5 BV NB/NB:NB/NB 0 0 0 0 0
25 35 5 BV NB/NB:NB/NB 0 0 0 0 0
26 35 5 BV NB/NB:NB/NB 0 0 0 0 0
27 35 5 BV NB/NB:NB/NB 0 0 0 0 0
28 35 5 BV NB/NB:NB/NB 0 0 0 0 0
29 35 5 BV NB/NB:NB/NB 0 0 0 0 0
30 35 5 BV NB/NB:NB/NB 0 0 0 0 0
...这样我就可以得到每个行为观察(最后五列)的数量总和,每个 Color_Combo
中都有一个唯一的 Week
。每种颜色组合代表一只鸟,我想知道一周内有多少不同 只鸟唱歌(那一周一只鸟唱歌多少次无关紧要)。我在使用 aggregate
时遇到问题,因为 color_combo
是一个字符向量,我尝试使用这个问题中的代码:R: Aggregate character strings 但无法让它工作。我想要的是这样的:
Week Singing Building Incubating nestlings Empty_nest
[1,] 1 1 0 0 0 0
[2,] 3 0 0 0 0 0
[3,] 4 1 1 0 0 0
[4,] 5 0 0 0 0 0
[5,] 6 0 0 0 0 0
[6,] 7 0 0 0 0 0
[7,] 8 0 0 0 0 0
[8,] 9 0 0 0 0 0
[9,] 10 0 0 0 0 0
[10,] 11 0 0 0 0 0
我有相当多的数据,所以最终会有大于 1 的条目。任何帮助将不胜感激!
解决方法
您可以为每个 Color_Combo
中的每个行为计算唯一 Week
的数量。
使用 dplyr
可以这样做:
library(dplyr)
sample %>%
group_by(Week) %>%
summarise(across(Singing:Empty_Nest,~n_distinct(Color_Combo[. > 0])))-> result
result
# Week Singing Building Incubating Nestlings Empty_Nest
# <int> <int> <int> <int> <int> <int>
#1 1 1 0 0 0 0
#2 3 0 0 0 0 0
#3 4 1 1 0 0 0
#4 5 0 0 0 0 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。