我正在处理棒球数据集:
data(baseball, package="plyr")
library(dplyr)
baseball[,1:4] %>% head
id year stint team
4 ansonca01 1871 1 RC1
44 forceda01 1871 1 WS3
68 mathebo01 1871 1 FW1
99 startjo01 1871 1 NY2
102 suttoez01 1871 1 CL1
106 whitede01 1871 1 CL1
首先,我想对团队的数据进行分组,以便找到每个团队出现的第一年,以及为每个团队效力的不同玩家数量:
baseball[,1:4] %>% group_by(team) %>%
summarise("first_year"=min(year), "num_distinct_players"=n_distinct(id))
# A tibble: 132 × 3
team first_year num_distinct_players
<chr> <int> <int>
1 ALT 1884 1
2 ANA 1997 29
3 ARI 1998 43
4 ATL 1966 133
5 BAL 1954 158
现在我想添加一个列,显示任何玩家(id)为相关团队所玩的最大年数。为此,我需要以某种方式按现有组(团队)内的玩家分组,并选择最大行数。我该怎么做?
答案 0 :(得分:4)
也许这有帮助
baseball %>%
select(1:4) %>%
group_by(id, team) %>%
dplyr::mutate(nyear = n_distinct(year)) %>%
group_by(team) %>%
dplyr::summarise(first_year = min(year),
num_distinct_players = n_distinct(id),
maxYear = max(nyear))
答案 1 :(得分:1)
我尝试使用基座R
执行此操作并提出此问题。这很慢。
df = data.frame(t(sapply(split(baseball, baseball$team), function(x)
cbind( min(x$year),
length(unique(x$id)),
max(sapply(split(x,x$id), function(y)
nrow(y))),
names(which.max(sapply(split(x,x$id), function(y)
nrow(y)))) ))))
colnames(df) = c("Year", "Unique Players", "Longest played duration",
"Longest Playing Player")
id
s的长度,即该团队中的玩家数量id
将每个组拆分为子组,并获取将为该团队中的玩家播放的最长持续时间的最大行数names
的{{1}}最大行数,其中包含在该小组中播放时间最长的玩家的名称