我有兩個數據幀包含相關數據。這與NFL有關。一個DF有按周球員的名字和接收目標(玩家DF):R:如何從兩個其他數據幀創建一個新的數據幀
Player Tm Position 1 2 3 4 5 6
1 A.J. Green CIN WR 13 8 11 12 8 10
2 Aaron Burbridge SFO WR 0 1 0 2 0 0
3 Aaron Ripkowski GNB RB 0 0 0 0 0 1
4 Adam Humphries TAM WR 5 8 12 4 2 0
5 Adam Thielen MIN WR 5 5 4 3 8 0
6 Adrian Peterson MIN RB 2 3 0 0 0 0
其他數據幀recieving通過團隊總結目標,每星期(團隊DF):
Tm `1` `2` `3` `4` `5` `6`
<fctr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 ARI 37 35 50 45 26 35
2 ATL 38 34 30 37 28 41
3 BAL 32 45 40 51 47 48
4 BUF 22 30 20 33 20 26
5 CAR 31 39 36 47 28 46
6 CHI 28 29 45 36 41 49
7 CIN 30 54 28 31 39 31
8 CLE 26 33 38 38 35 42
9 DAL 43 30 24 32 24 27
10 DEN 26 32 35 31 34 47
# ... with 22 more rows
我是什麼試圖做的是按星期創建另一個包含玩家目標百分比的數據框。所以我需要匹配球員df中的「Tm」列和周列標題(1-6)中的球隊。
我已經找到了如何通過將它們合併,然後創建新行要做到這一點,但我添加更多的數據(周)我需要編寫更多的代碼:
a <- merge(playertgt, teamtgt, by="Tm") #merges the two
a$Wk1 <- a$`1.x`/a$`1.y`
a$Wk2 <- a$`2.x`/a$`2.y`
a$Wk3 <- a$`3.x`/a$`3.y`
所以我要尋找是一個很好的方法來做到這一點,將自動更新,並不需要創建一個df與我不需要的一堆列,並將更新與新周,因爲我將它們添加到我的源數據。
如果在其他地方回答這個問題,我很抱歉,但我一直在尋找一種很好的方法來做到這一點,我找不到它。在此先感謝您的幫助!很顯然,我只是在完成合並後選擇列使用dplyr
爲ends_with
方便
library(dplyr)
## Do a left outer join to match each player with total team targets
a <- left_join(playertgt,teamtgt, by="Tm")
## Compute percentage over all weeks selecting player columns ending with ".x"
## and dividing by corresponding team columns ending with ".y"
tgt.pct <- select(a,ends_with(".x"))/select(a,ends_with(".y"))
## set the column names to week + number
colnames(tgt.pct) <- paste0("week",seq_len(ncol(teamtgt)-1))
## construct the output data frame adding back the player and team columns
tgt.pct <- data.frame(Player=playertgt$Player,Tm=playertgt$Tm,tgt.pct)
: