如何在dplyr中按组删除前n行

nat*_*rus 1 r dplyr

这应该很容易,但是当我运行时:

require(dplyr)
data.frame(a = c(1,1,1,2,2,2), b= c(1,2,3,4,5,6)) %>%
group_by(a) %>%
slice(-1:-2)
Run Code Online (Sandbox Code Playgroud)

期待data.frame(a = c(1,2), b = c(3,6)),我收到以下错误:

Error in UseMethod("slice") : 
  no applicable method for 'slice' applied to an object of class "c('grouped_df', 'tbl_df', 'tbl', 'data.frame')"
Run Code Online (Sandbox Code Playgroud)

真的没什么可添加的 - 根据这里的所有帐户和答案,这应该是正确的解决方案。任何人都可以帮忙吗?

akr*_*run 5

这可能是由于在slice加载其他包时屏蔽了其他包的功能而导致的问题。例如,如果我们使用xgboost::slice

data.frame(a = c(1,1,1,2,2,2), b= c(1,2,3,4,5,6)) %>%
  group_by(a) %>%
  xgboost::slice(-1:-2)
Run Code Online (Sandbox Code Playgroud)

UseMethod("slice") 中的错误:没有适用于应用于类 "c('grouped_df', 'tbl_df', 'tbl', 'data.frame') 的对象的 'slice' 的方法


而是指定 dplyr::slice

data.frame(a = c(1,1,1,2,2,2), b= c(1,2,3,4,5,6)) %>%
  group_by(a) %>%
  dplyr::slice(-1:-2)
# A tibble: 2 x 2
# Groups:   a [2]
#     a     b
#  <dbl> <dbl>
#1     1     3
#2     2     6
Run Code Online (Sandbox Code Playgroud)

或者在仅dplyr加载的新会话中执行此操作