[英]R Language - Rolling averages across columns
我正在嘗試對某些NFL數據進行3欄平均滾動計算,這是數據和結果數據幀:
數據:
Player <- c("Player1", "Player2", "Player3", "Player4", "Player5")
Week1 <- c(10, 5, 6, 8, 7)
Week2 <- c(12, 9, 4, 2, 8)
Week3 <- c(4, 5, 4, 3, 12)
Week4 <- c(15, 7, 12, NA, 5)
Week5 <- c(NA, 5, 8, 11, 6)
q <- data.frame(Player, Week1, Week2, Week3, Week4, Week5)
數據框:
Player Week1 Week2 Week3 Week4 Week5
1 Player1 10 12 4 15 NA
2 Player2 5 9 5 7 5
3 Player3 6 4 4 12 8
4 Player4 8 2 3 NA 11
5 Player5 7 8 12 5 6
因此,我想做的是從第1周開始的整個星期內進行3次游戲滾動平均值。因此,對於玩家而言,將平均Week1,Week2,Week3並在新列中給我值,然后將其平均為Week2,Week3 ,第4周,然后在新列中給我該值,等等。
在這種情況下,新的數據框應如下所示:
Player Week1 Week2 Week3 Week4 Week5 Avg1 Avg2 Avg3
1 Player1 10 12 4 15 NA 8.7 10.3 NA
2 Player2 5 9 5 7 5 6.3 7.0 5.7
3 Player3 6 4 4 12 8 4.7 6.7 8.0
4 Player4 8 2 3 NA 11 4.3 4.3 5.3
5 Player5 7 8 12 5 6 9.0 8.3 7.7
請注意,對於第4周的Player4,有一個NA被忽略了……那一周該玩家由於某種原因沒有參加比賽,因此我將前兩款游戲和之后的游戲用於Avg3。
我需要這些新列,因為我將進行回歸分析,以查看3的平均值是否可以預測下一個值。 我所能找到的一切都具有滾動平均值,但我經驗不足,因此,對於此類問題的數據格式化方面的任何幫助都將受到贊賞。 先謝謝您的幫助!
我們可以使用zoo
包中的rollmean
library(zoo)
t(apply(q[-1], 1, function(x) rollmean(x, 3))))
# Week2 Week3 Week4
#[1,] 8.666667 10.333333 NA
#[2,] 6.333333 7.000000 5.666667
#[3,] 4.666667 6.666667 8.000000
#[4,] 4.333333 NA NA
#[5,] 9.000000 8.333333 7.666667
最后,要獲得一個組合的數據框,
cbind(q, t(apply(q[-1], 1, function(x) rollmean(x, 3))))
# Player Week1 Week2 Week3 Week4 Week5 Week2 Week3 Week4
#1 Player1 10 12 4 15 NA 8.666667 10.333333 NA
#2 Player2 5 9 5 7 5 6.333333 7.000000 5.666667
#3 Player3 6 4 4 12 8 4.666667 6.666667 8.000000
#4 Player4 8 2 3 NA 11 4.333333 NA NA
#5 Player5 7 8 12 5 6 9.000000 8.333333 7.666667
如果您對列名有特定的了解,可以隨時通過以下方式進行更改
temp <- t(apply(q[-1], 1, function(x) rollmean(x, 3)))
colnames(temp) <- c("avg1", "avg2", "avg3")
然后在temp
上使用cbind
編輯
要回答OP的幾個問題,
如果一開始要刪除多個列,則只需選擇/取消選擇具有其索引號的列
例如,
要取消選擇前兩列,您可以使用q[-c(1:2)]
等於q[3:7]
,從而為它提供一系列取消選擇/選擇的值。
function(x)
被稱為匿名函數,您可以使用該函數將自己的函數應用於數據框的每一行。
rollmean
不處理NA
值。 從文件?rollmean
rollmean的默認方法不處理包含NA的輸入。 在這種情況下,請改用rollapply。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.