당신은 dplyr
으로이 작업을 수행 할 수 있습니다
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)
을 분명히 난 단지 조인 후 열을 선택하는 ends_with
의 편의를 위해 dplyr
을 사용하고 있습니다. 이 선택을 할 grepl
를 사용하는 기본-R의 접근 방식은 다음과 같습니다
a <- merge(playertgt, teamtgt, by="Tm", all.x=TRUE)
tgt.pct <- subset(a,select=grepl(".x$",colnames(a)))/subset(a,select=grepl(".y$",colnames(a)))
colnames(tgt.pct) <- paste0("week",seq_len(ncol(teamtgt)-1))
tgt.pct <- data.frame(Player=playertgt$Player,Tm=playertgt$Tm,tgt.pct)
데이터 : 당신의 게시 제한 데이터 만 AJ 그린은 자신의 목표 비율을 계산해야합니다 :
playertgt <- structure(list(Player = structure(1:6, .Label = c("A.J. Green",
"Aaron Burbridge", "Aaron Ripkowski", "Adam Humphries", "Adam Thielen",
"Adrian Peterson"), class = "factor"), Tm = structure(c(1L, 4L,
2L, 5L, 3L, 3L), .Label = c("CIN", "GNB", "MIN", "SFO", "TAM"
), class = "factor"), Position = structure(c(2L, 2L, 1L, 2L,
2L, 1L), .Label = c("RB", "WR"), class = "factor"), X1 = c(13L,
0L, 0L, 5L, 5L, 2L), X2 = c(8L, 1L, 0L, 8L, 5L, 3L), X3 = c(11L,
0L, 0L, 12L, 4L, 0L), X4 = c(12L, 2L, 0L, 4L, 3L, 0L), X5 = c(8L,
0L, 0L, 2L, 8L, 0L), X6 = c(10L, 0L, 1L, 0L, 0L, 0L)), .Names = c("Player",
"Tm", "Position", "X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA,
-6L))
## Player Tm Position X1 X2 X3 X4 X5 X6
##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
teamtgt <- structure(list(Tm = structure(1:10, .Label = c("ARI", "ATL",
"BAL", "BUF", "CAR", "CHI", "CIN", "CLE", "DAL", "DEN"), class = "factor"),
X1 = c(37L, 38L, 32L, 22L, 31L, 28L, 30L, 26L, 43L, 26L),
X2 = c(35L, 34L, 45L, 30L, 39L, 29L, 54L, 33L, 30L, 32L),
X3 = c(50L, 30L, 40L, 20L, 36L, 45L, 28L, 38L, 24L, 35L),
X4 = c(45L, 37L, 51L, 33L, 47L, 36L, 31L, 38L, 32L, 31L),
X5 = c(26L, 28L, 47L, 20L, 28L, 41L, 39L, 35L, 24L, 34L),
X6 = c(35L, 41L, 48L, 26L, 46L, 49L, 31L, 42L, 27L, 47L)), .Names = c("Tm",
"X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA,
-10L))
## Tm X1 X2 X3 X4 X5 X6
##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
을 결과입니다 :
## Player Tm week1 week2 week3 week4 week5 week6
##1 A.J. Green CIN 0.4333333 0.1481481 0.3928571 0.3870968 0.2051282 0.3225806
##2 Aaron Burbridge SFO NA NA NA NA NA NA
##3 Aaron Ripkowski GNB NA NA NA NA NA NA
##4 Adam Humphries TAM NA NA NA NA NA NA
##5 Adam Thielen MIN NA NA NA NA NA NA
##6 Adrian Peterson MIN NA NA NA NA NA NA