我在 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 中都有多個速度觀察值。
我們感興趣的資料示例,在資料框中 - 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 個為例)并計算每個參與者的平均速度并將其存盤并與變數一起保存在一個新的資料幀中包含其他 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
我可以通過一些可怕的、凌亂的長代碼來做到這一點——但請看看是否有人有更直觀的想法!
:)
uj5u.com熱心網友回復:
要添加到先前的答案,我同意在不為每天創建新資料框的情況下執行此操作要容易得多。使用一些生成的資料,您可以達到您想要的結果,如下所示:
# 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
uj5u.com熱心網友回復:
您沒有包含資料集的MCVE,因此我無法測驗解決方案,但使用tidyverse解決方案似乎是一個非常簡單的問題。
首先,為什么要拆分PD2成單獨的資料框?如果你跳過它,你可以使用 group 和 summarise 來獲得組的平均值:
PD2 %>%
group_by(Gait_Day, SubjectID) %>%
summarize(Steps = mean(Speed))
這會給你一個“長篇” data.frame 3個變數:Gait_Day,SubjectID和Steps,這對于這個問題,日平均速度。如果您希望它采用最后顯示的格式,只需使用pivot_wider. 您可以看到這個問題以進一步解釋:如何將資料從長格式重塑為寬格式
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405902.html
標籤:
上一篇:列舉并獲取每個元組的第一項?
