[英]How to estimate means from same column in large number of dataframes, based upon a grouping variable in R
我在 R (>50) 中有大量 DF,它们对应于我执行的不同过滤,以下是其中 7 个的示例:
Steps_Day1 <- filter(PD2, Gait_Day == 1)
Steps_Day2 <- filter(PD2, Gait_Day == 2)
Steps_Day3 <- filter(PD2, Gait_Day == 3)
Steps_Day4 <- filter(PD2, Gait_Day == 4)
Steps_Day5 <- filter(PD2, Gait_Day == 5)
Steps_Day6 <- filter(PD2, Gait_Day == 6)
Steps_Day7 <- filter(PD2, Gait_Day == 7)
每个数据帧都包含 19 个变量,但是我只对它们的速度(计算平均值)和它们的主题 ID 感兴趣,因为每个主题在同一个 DF 中都有多个速度观察值。
我们感兴趣的数据示例,在 dataframe - Steps_Day1:
Speed SubjectID
0.6 1
0.7 1
0.7 2
0.8 2
0.1 2
1.1 3
1.2 3
1.5 4
1.7 4
0.8 4
数据上升到 61 分。 并且每个参与者的观察次数远大于此。
现在我想做的是创建一个代码,该代码自动循环遍历 50 个数据帧中的每一个(以上面的 7 个为例)并计算每个参与者的平均速度并将其存储并保存在新的 dataframe 中,与变量一起包含其他 DF 中每个参与者的平均值。
第 1 天的步数示例(值不准确)
Speed SubjectID
0.6 1
0.7 2
1.2 3
1.7 4
等等......在我最终得到一个包含列向量的最终 DF 之前,每个其他数据帧中的每个参与者的平均值可能看起来像:
Steps_Day1 StepsDay2 StepsDay3 StepsDay4 SubjectID
0.6 0.8 0.5 0.4 1
0.7 0.9 0.6 0.6 2
1.2 1.1 0.4 0.7 3
1.7 1.3 0.3 0.8 4
我可以通过一些可怕的、凌乱的长代码来做到这一点——但请看看是否有人有更直观的想法!
:)
您没有包含数据集的 MCVE,因此我无法测试解决方案,但使用tidyverse
解决方案似乎是一个非常简单的问题。
首先,为什么要将PD2
拆分为单独的数据帧? 如果你跳过它,你可以使用 group 和 summarise 来获得组的平均值:
PD2 %>%
group_by(Gait_Day, SubjectID) %>%
summarize(Steps = mean(Speed))
这将为您提供一个带有 3 个变量的“长格式”data.frame: Gait_Day
、 SubjectID
和Steps
,它具有该主题和日期的平均速度。 如果您想要最后显示的格式,只需使用pivot_wider
将 pivot 转换为“宽格式”。 您可以看到这个问题以进一步解释:如何将数据从长格式重塑为宽格式
要添加到先前的答案,我同意在不为每天创建新数据框的情况下执行此操作要容易得多。 使用一些生成的数据,您可以达到您想要的结果,如下所示:
# Generate some data
df <- data.frame(
day = rep(1:5, 1, 100),
subject = rep(5:10, 1, 100),
speed = runif(500)
)
df %>%
group_by(day, subject) %>%
summarise(avg_speed = mean(speed)) %>%
pivot_wider(names_from = day,
names_prefix = "Steps_Day",
values_from = avg_speed)
# A tibble: 6 × 6
subject Steps_Day1 Steps_Day2 Steps_Day3 Steps_Day4 Steps_Day5
<int> <dbl> <dbl> <dbl> <dbl> <dbl>
1 5 0.605 0.416 0.502 0.516 0.517
2 6 0.592 0.458 0.625 0.531 0.460
3 7 0.475 0.396 0.586 0.517 0.449
4 8 0.430 0.435 0.489 0.512 0.548
5 9 0.512 0.645 0.509 0.484 0.566
6 10 0.530 0.453 0.545 0.497 0.460
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.