当调用slice(df, i)dplyr包中的R时,如果我要求的行索引不存在(nrows < i),它似乎返回所有行,但是返回组中的第一行,就像我调用的那样slice(df, -1).
例如:
library(dplyr)
c1 <- c("a","b","c")
c2 <- 1:3
df <- data.frame(c1,c2)
slice(df,2)
Run Code Online (Sandbox Code Playgroud)
结果将如预期:
b 2
Run Code Online (Sandbox Code Playgroud)
但是,如果我打电话
slice(df, 5)
Run Code Online (Sandbox Code Playgroud)
结果是每一行但第一行:
b 2
c 3
Run Code Online (Sandbox Code Playgroud)
当使用group_by()和然后调用slice()组时,这尤其令人厌烦.是否有合理的理由slice()这样做?
似乎返回的行填充了NAs,对于大于'nrows'的行索引,在组中"不够"以产生所请求的切片可能是有用的结果.
这是因为我试图从每个组中提取排名结果,但有些组没有足够的数据,而其他组则没有.例如"列出每个地区销售额第10高的销售人员." 但在其中一个地区只有8名销售人员.
我同意:这种行为似乎不对。您可以使用以下方法作为替代方案:
df <- data_frame(c1=c('a', 'a', 'b', 'c'), c2=c(1,2,3,4))
# c1 c2
# 1 a 1
# 2 a 2
# 3 b 3
# 4 c 4
# get the second smallest row for each group, or the last row for
# groups with less than 2 elements
df %>%
group_by(c1) %>%
filter(row_number() == min(2, n()))
# c1 c2
# 1 a 2
# 2 b 3
# 3 c 4
Run Code Online (Sandbox Code Playgroud)