使用行索引从数据框中删除行,其中行索引可能是零长度向量

Mer*_*glu 5 r dataframe dplyr

我想使用行的数字索引从某些数据帧中删除一些行.但有时候我要丢弃的索引向量变为零长度向量.在这种情况下,我希望不应该从原始数据帧中删除任何内容.但不是一无所有,一切都被抛弃了.

例如,这里drop按预期工作

df = data_frame( a = 10:12 )
drop = c(1,2)
df[ -drop, ]
# # A tibble: 1 × 1
# a
# <int>
# 1    12
Run Code Online (Sandbox Code Playgroud)

但是当drop零长度向量时,那么删除那些行不会像我期望的那样工作.

drop = integer()
df[ -drop, ]
# A tibble: 0 × 1
# ... with 1 variables: a <int>
Run Code Online (Sandbox Code Playgroud)

我期待得到整个df对象而不做任何修改.

如何在行索引可能成为零长度向量的情况下安全地使用行索引从数据框中删除行?

akr*_*run 6

因此,最好使用%in%和否定!

df[!seq_len(nrow(df)) %in% drop, ]
Run Code Online (Sandbox Code Playgroud)

因为它是一个data_frame,我们可以使用tidyverse方法

df %>%
   filter(!row_number() %in% drop)
Run Code Online (Sandbox Code Playgroud)