我有一份来自 Lahman
的纽约大都会棒球队球员名单数据库按字母顺序排列。对于每个球员来说,他的出场年份都按升序排列。我需要为每个玩家提取他参加比赛的第一年的数据,并将所有前行放入一个新的数据框中。
在我的 Mac 上 RStudio
我已经达到了对所需数据进行分组和排序的程度。这是一个示例。
playerID,yearID,G,AB,R,H
aceveju01,1997,25,6,0,0
acostma01,2010,41,0,0,0
acostma01,2011,44,0,0,0
acostma01,2012,45,0,0,0
adkinjo01,2007,1,0,0,0
agbaybe01,1998,11,15,1,2
agbaybe01,1999,101,276,42,79
agbaybe01,2000,119,350,59,101
agbaybe01,2001,91,296,28,82
ageeto01,1968,132,368,30,80
ageeto01,1969,149,565,97,153
ageeto01,1970,153,636,107,182
ageeto01,1971,113,425,58,121
ageeto01,1972,114,422,52,96
aguilch01,2008,8,12,0,2
出于测试目的,我从这段代码开始,而不是 piping
。这就是我所能进步的程度。
Lahman_batting18 <- read.csv('Batting-copy.csv', header = TRUE, stringsAsFactors=FALSE)
Lahman_batting18s <- select(Lahman_batting18,playerID:SO)
Lahman_batting18f <- filter(Lahman_batting18s,teamID == 'NYN')
Lahman_batting18fa <- arrange(Lahman_batting18f, playerID, yearID)
期望的输出:
playerID,yearID,G,AB,R,H
aceveju01,1997,25,6,0,0
acostma01,2010,41,0,0,0
adkinjo01,2007,1,0,0,0
agbaybe01,1998,11,15,1,2
ageeto01,1968,132,368,30,80
aguilch01,2008,8,12,0,2
感谢您的帮助!
最佳答案
d.b使用基本的r
,而我更喜欢dplyr
和pipe
s。
Lahman_batting18 %>% group_by(playerID) %>% arrange(playerID, yearID) %>%
filter(yearID == min(yearID))
仅过滤最小值的年份。我希望这就是你想要的?我使用您的示例数据得到的输出:
# A tibble: 6 x 6
# Groups: playerID [6]
playerID yearID G AB R H
<fct> <int> <int> <int> <int> <int>
1 aceveju01 1997 25 6 0 0
2 acostma01 2010 41 0 0 0
3 adkinjo01 2007 1 0 0 0
4 agbaybe01 1998 11 15 1 2
5 ageeto01 1968 132 368 30 80
6 aguilch01 2008 8 12 0 2
关于r - 如何在 R 中仅提取分组项的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57136939/