根据一组值仅保留数据框的某些行

问题描述 投票:0回答:1

我有一个带有 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 循环并以这种方式进行推断,但我想知道是否有一种更优雅和更有效的方法来解决这个问题。预先感谢。

r subset
1个回答
30
投票

尝试

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
© www.soinside.com 2019 - 2024. All rights reserved.