【发布时间】:2020-10-04 04:23:50
【问题描述】:
我有一个棒球运动员名单 (playerID)。我想知道他们在全明星赛中参加了多少支不同的球队。例如,输入中的 aaronha01 在五次全明星赛中为同一支球队效力,因此他的 NumTms 为 1。输出图像显示了我希望输出的格式。
代码 我试过这段代码,但没有用。我更喜欢使用 dplyr 的答案。
df %>% group_by(playerID) %>% select(playerID, teamID) %>% mutate(teams = n_distinct(playerID)) %>% arrange(desc(teams))
输入
structure(list(playerID = c("aaronha01", "aaronha01", "aaronha01",
"aaronha01", "aaronha01", "aasedo01", "abreubo01", "abreubo01",
"abreujo02", "abreujo02", "abreujo02", "acunaro01", "adamsac01",
"adcocjo01", "adcocjo01", "ageeto01", "ageeto01", "aguilje01",
"aguilri01", "aguilri01", "aguilri01", "aguirha01", "albieoz01",
"alcansa01", "alexado01", "alfoned01", "allendi01", "allendi01",
"allendi01", "allendi01", "allendi01", "allendi01", "allendi01"
), teamID = c("MLN", "MLN", "MLN", "MLN", "MLN", "BAL", "PHI",
"PHI", "CHA", "NYN", "ATL", "ATL", "NY1", "MLN", "DET", "CHA",
"CHA", "MIL", "MIN", "MIN", "MIN", "DET", "ATL", "MIA", "DET",
"NYN", "PHI", "PHI", "PHI", "SLN", "CHA", "CHA", "CHA"), lgID = c("NL",
"NL", "NL", "NL", "NL", "AL", "NL", "NL", "AL", "AL", "AL", "NL",
"NL", "NL", "NL", "AL", "AL", "NL", "AL", "AL", "AL", "AL", "NL",
"NL", "AL", "NL", "NL", "NL", "NL", "NL", "AL", "AL", "AL")), row.names = c(NA,
-33L), class = c("tbl_df", "tbl", "data.frame"))
我希望输出如何显示:
我曾尝试根据 How to add count of unique values by group to R data.frame 的 stackoverflow 帖子进行此操作,但没有成功。
【问题讨论】:
-
您要查找的是
aggregate(NumTms~playerID,cbind(unique(df),NumTms = 1),length),它无法复制到您想要的表中。例如。如果一名球员在两个联赛中怎么办?你应该输出哪个联赛?另外,您应该输出球员效力的众多球队中的哪支球队?在tidyverse:distinct(df)%>%group_by(playerID)%>%summarise(NumTms = n())