【发布时间】:2015-01-22 10:08:53
【问题描述】:
我想在数据框中查找与模式不匹配的行。
Key = c(1,2,3,4,5)
Code = c("X348","I605","B777","I609","F123")
df1 <- data.frame(Key, Code)
我可以使用以下方法找到以 I60 开头的项目:
df2 <- subset (df1, grepl("^I60", df1$Code))
但我希望能够找到所有其他行(即那些不以 I60 开头的行)。 invert 参数不适用于 grepl。 grep 本身不会找到所有行,也无法将结果传递给子集命令。感谢您的帮助。
【问题讨论】:
-
subset(df1, !grepl("^I60", Code)) -
不确定
grep不起作用是什么意思。df1[grep("^I60", df1$Code, invert = TRUE), ]或df1[-grep("^I60", df1$Code), ]似乎工作正常。我也不明白为什么有人会使用subset。它总是让我想起人们出于某种原因必须使用plyr的奇怪冲动。 -
公平点,只是(坏)习惯,但我是 R 新手。感谢您的 cmets,感谢。
-
赞成在那里使用'invert' - 由于某种原因,在使用 grep 时该标志已经逃脱了我。整洁的。与管道结合以排除多个对象时也能很好地工作。例如 df1[grep("^I60|^F123", df1$Code, invert=TRUE, ]
标签: r