从df删除行时使用R,如果无法满足条件,则which()删除所有行

时间:2020-07-20 13:10:37

标签: r conditional-statements

我对R中的单个函数which()有问题。我在代码中使用它来根据条件选择需要删除的行。在我的示例中,我将条件设置为在列“ var2”中某位置出现字母“ a”。

如果至少发生一次,则该行将被删除,其余的将保留。如果没有发生这种情况,它将删除所有行,并给我一个空的数据框!

这是我的意思的示例:

df <- data.frame(var1 = c(1:9), var2 = c(2:11), stringsAsFactors = F)
df <- df[-which(grepl("a", df$var2)),]

它应该返回与以前相同的df,因为没有包含“ a”的行。相反,在运行此行之后,我有一个空的df。

我尝试使用!相反,但结果相同。

df <- df[!which(grepl("a", df$var2)),]

我在这里做错什么了?

1 个答案:

答案 0 :(得分:1)

which当所有值为FALSE时返回空向量。

which(grepl("a", df$var2))
#integer(0)

使用此空向量对数据帧进行子集设置时,将得到一个空数据帧。因此,请勿使用which,而将grepl!结合使用:

df[!grepl("a", df$var2),]

或将grepinvert = TRUE

df[grep("a", df$var2, invert = TRUE),]