我有一个数据框,它保存不同组(G)中多个科目(S)的跨时间(T)的活动(A)数据。每10分钟对活动数据进行采样。我想要做的是将数据重新分组到30分钟的二进制位(添加或平均值),保留主题ID和组信息。
例。我有这样的事情:
S G T A
1 A 30 25
1 A 40 20
1 A 50 15
1 A 60 20
1 A 70 5
1 A 80 20
2 B 30 10
2 B 40 10
2 B 50 10
2 B 60 20
2 B 70 20
2 B 80 20
我想要这样的事情:
S G T A
1 A 40 20
1 A 70 15
2 B 40 10
2 B 70 20
时间是平均时间(如示例中)还是第一个/最后一个时间点以及活动是否被平均(再次,如示例中所示)或总计现在不重要。
我将非常感谢您提供的任何帮助。我正在考虑用Python创建一个脚本来重新绑定这个特定的数据帧,但我认为可能有一种方法可以在R中以一种可以应用于任何具有不同列数的数据帧等方式来实现它。
有一些方法可以达到所希望的数据框架。我已经复制了你的数据帧:
df <- data.frame(S = c(rep(1,6),rep(2,6)),
G = c(rep("A",6),rep("B",6)),
T = rep(seq(30,80,10),2),
A = c(25, 20, 15, 20, 5, 20, 10, 10, 10, 20, 20, 20))
经典的方式可能是:
df[df$T == 40 | df$T == 70,]
更现代的整洁方式是
library(tidyverse)
df %>% filter(T == 40 | T ==70)
如果你想获得T == 40和70过滤的每组G的平均值:
df %>% filter(T == 40 | T == 70) %>%
group_by(G) %>%
mutate(A = mean(A))