我想使用行的数字索引从某些数据帧中删除一些行。但有时候我要丢弃的索引向量变为零长度向量。在这种情况下,我希望不应该从原始数据帧中删除任何内容。但不是一无所有,一切都被抛弃了。
例如,此处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
对象而不做任何修改。
如何使用行索引从数据框中删除行,其中行索引可能成为零长度向量?
答案 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, ])