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

时间:2017-05-30 15:04:24

标签: r dataframe dplyr

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

例如,此处drop按预期工作

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

但是当drop为零长度向量时,删除这些行并不像我期望的那样工作。

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

我希望得到整个df对象而不做任何修改。

如何使用行索引从数据框中删除行,其中行索引可能成为零长度向量?

2 个答案:

答案 0 :(得分:5)

出于这个原因,最好使用%in%并否定!

df[!seq_len(nrow(df)) %in% drop, ]

由于它是data_frame,我们可以使用tidyverse方法

df %>%
   filter(!row_number() %in% drop)

答案 1 :(得分:0)

以下简单的代码似乎正常工作!

df   <- data.frame(a = 10:12)
drop <-  c(1,2)
'if'(length(drop) == 0, df, df[-drop, ])

drop <-  integer()
'if'(length(drop) == 0, df, df[-drop, ])