我对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)),]
我在这里做错什么了?
答案 0 :(得分:1)
which
当所有值为FALSE
时返回空向量。
which(grepl("a", df$var2))
#integer(0)
使用此空向量对数据帧进行子集设置时,将得到一个空数据帧。因此,请勿使用which
,而将grepl
与!
结合使用:
df[!grepl("a", df$var2),]
或将grep
与invert = TRUE
df[grep("a", df$var2, invert = TRUE),]