我有一个带有 ID 列和几列值的数据框。我只想根据该行的 ID 值是否与另一组值匹配(例如,称为“保留”)来保留数据帧的某些行。
为了简单起见,这里有一个例子:
df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3))
keep <- c("a", "d", "r", "x")
如何创建一个新的数据框,其中包含仅具有与 keep 匹配的 ID 的行?我可以使用
which()
函数仅对一个字母执行此操作,但对于多个字母,我会收到警告消息和错误的返回。我知道我可以在数据帧中运行一个 for 循环并以这种方式进行推断,但我想知道是否有一种更优雅和更有效的方法来解决这个问题。预先感谢。
尝试
df[df$ID %in% keep, ]
或 subset(df, ID %in% keep)
- 请参阅帮助页面了解 sets。
编辑:此外,如果这是一个字母,您可以写例如
df[df$ID == "a", ]
而不是使用 which()
。
编辑:
is.element
功能也可以使用(参见https://stackoverflow.com/a/19136456/610668):
> df <- data.frame(id=c("A", "B", "C"), x=c(5, 22, 88))
> df[df$id %in% c("B", "C"), ]
id x
2 B 22
3 C 88
> df[is.element(df$id, c("B", "C")), ]
id x
2 B 22
3 C 88