如何仅提取R中分组项的第一行?
我在如何仅提取R中分组项的第一行?,r,group-by,subset,data-manipulation,R,Group By,Subset,Data Manipulation,我在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,2
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
出于测试目的,我从这段代码开始,而不是从管道开始。这是我所能做到的
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)
谢谢你的帮助 使用baser
,而我更喜欢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
#一个tible:6 x 6
#组别:playerID[6]
playerID yearID G AB R H
1 aceveju01 1997 25 6 0 0 0
2 acostma01 2010 41 0 0 0
3 adkinjo01 2007 1 0 0 0
4 agbaybe01 1998 11 15 1 2
5岁01 1968 132 368 30 80
6 aguilch01 2008 8 12 0 2
d[ave(1:NROW(d),d$playerID,FUN=seq_-along)==1,]
@d.b.您的代码是如何工作的?您好,如果这是您问题的解决方案,请您接受答案(答案旁边的勾号…)?然后显示问题已解决。Lahman_batting18%>%group_by(playerID)%%>%slice(1L)
@RonakShah使用slice(1L)和slice(1)有什么区别?在您的输出中,playerID不是按字母顺序排列的,这是我希望的。你的是yearID订购的。哦,对不起,更正了。现在输出与我提到的代码完全一致了…@Ronak Shah今天,我使用这两种解决方案检查了第一行的总数:(1)季节1_all%groupu by(playerID)%%>%arrange(playerID,yearID)%%>%filter(yearID==min(yearID))(2)季节1_all%groupy by(playerID)%%>%slice(1)我希望解决方案中的总行数相同,但实际情况并非如此。解决方案1有19999行;然而,解决方案2有19428行。此外,当我运行“distinct(Lahman_batting18,playerID)”时,我也得到了19428排。为什么我会得到不同的数字?哪种解决方案给出正确的总数?
# 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