我希望在数据中添加一列,以列出数据集中观测值的单个计数。我有关于NBA球队及其每场比赛的数据。它们按日期列出,我想创建一列,列出每个团队每个赛季在每个赛季中的#号。
我的数据如下:
# gmDate teamAbbr opptAbbr id
# 2012-10-30 WAS CLE 2012-10-30WAS
# 2012-10-30 CLE WAS 2012-10-30CLE
# 2012-10-30 BOS MIA 2012-10-30BOS
逗号分隔各列
我尝试使用“ add_count”,但这为我提供了每个团队在数据集中总共玩过的游戏数量。
先前尝试:
nba_box %>% add_count()
我希望添加的列显示每个球队的比赛数(1-82),但现在它显示数据集中的比赛总数(82)。
答案 0 :(得分:0)
这是一个基本的R示例,它从for循环的角度解决问题。假设一个团队可以是任一列,我们通过unlist
数据并使用table
函数对前面的行求和来跟踪团队的位置。
# intialize some fake data
test <- as.data.frame(t(replicate(6, sample( LETTERS[1:3],2))),
stringsAsFactors = F)
colnames(test) <- c("team1","team2")
# initialize two new columns
test$team2_gamenum <- test$team1_gamenum <- NA
count <- NULL
for(i in 1:nrow(test)){
out <- c(count, table(unlist(test[i,c("team1","team2")])))
count <- table(rep(names(out), out)) # prob not optimum way of combining two table results
test$team1_gamenum[i] <- count[which(names(count) == test[i,1])]
test$team2_gamenum[i] <- count[which(names(count) == test[i,2])]
}
test
# team1 team2 team1_gamenum team2_gamenum
#1 B A 1 1
#2 A C 2 1
#3 C B 2 2
#4 C B 3 3
#5 A C 3 4
#6 A C 4 5