Rp的dplyr切片中的奇怪行为

huf*_*uff 6 r dplyr

当调用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名销售人员.

Mat*_*rde 0

我同意:这种行为似乎不对。您可以使用以下方法作为替代方案:

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)