我有一个带有多个成对值的数据集(df1)。该对中的一行是一年(例如2014年),另一行是另一年(例如2013年)。对于每对,在G列中都有一个值。我需要计算高年级的G值小于小年级的G值的对数。
这是我的数据集df1的输出:
structure(list(Name = c("A.J. Ellis", "A.J. Ellis", "A.J. Pierzynski",
"A.J. Pierzynski", "Aaron Boone", "Adam Kennedy", "Adam Melhuse",
"Adrian Beltre", "Adrian Beltre", "Adrian Gonzalez", "Alan Zinter",
"Albert Pujols", "Albert Pujols"), Age = c(37, 36, 37, 36, 36,
36, 36, 37, 36, 36, 36, 37, 36), Year = c(2018, 2017, 2014, 2013,
2009, 2012, 2008, 2016, 2015, 2018, 2004, 2017, 2016), Tm = c("SDP",
"MIA", "TOT", "TEX", "HOU", "LAD", "TOT", "TEX", "TEX", "NYM",
"ARI", "LAA", "LAA"), Lg = c("NL", "NL", "ML", "AL", "NL", "NL",
"ML", "AL", "AL", "NL", "NL", "AL", "AL"), G = c(66, 51, 102,
134, 10, 86, 15, 153, 143, 54, 28, 149, 152), PA = c(183, 163,
362, 529, 14, 201, 32, 640, 619, 187, 40, 636, 650)), row.names = c(NA,
13L), class = "data.frame")
这里有一个小标题,显示了要检查的行的外观:https://www.dropbox.com/s/3nbfi9le568qb3s/grouped-pairs.png?dl=0
这是我用来创建小标题的代码:
df1 %>%
group_by(Name) %>%
filter(n() > 1)
我们可以用arrange
和Name
来Age
数据,并检查last
中的G
值是否小于每个first
的name
值,并用sum
计数那些出现的次数。] >
library(dplyr) df %>% arrange(Name, Age) %>% group_by(Name) %>% summarise(check = last(G) < first(G)) %>% pull(check) %>% sum(., na.rm = TRUE) #[1] 2
如果您希望较高年份的G值小于较小年份的G值的对,则可以使用
filter
。
df %>%
arrange(Name, Age) %>%
group_by(Name) %>%
filter(last(G) < first(G))
# Name Age Year Tm Lg G PA
# <chr> <dbl> <dbl> <chr> <chr> <dbl> <dbl>
#1 A.J. Pierzynski 36 2013 TEX AL 134 529
#2 A.J. Pierzynski 37 2014 TOT ML 102 362
#3 Albert Pujols 36 2016 LAA AL 152 650
#4 Albert Pujols 37 2017 LAA AL 149 636