r - 如何在 R 中仅提取分组项的第一行?

标签 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,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,而我更喜欢dplyrpipes。

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/

相关文章:

从带有点的公式的 RHS 中删除变量

mysql - 如何创建合并重复主键的 SELECT

R - 从原始数据集中下载子集

r - R中子集POSIXlt和POSIXct之间的区别

r - 获取两个R数据表中每个元素最接近的数量

r - 除了 "sentiment"之外,还有其他软件包可以在R中进行情感分析吗?

r - 使用 ggplot 将线段和点绘制在一起

mysql - 从另一个字段中减去一个字段,但子查询创建了 1 个字段

sql - 显示表中具有组中最小时间戳的整个记录

R:如何删除data.frame中的某些行