【问题标题】:Removing some individuals from a data.frame从 data.frame 中删除一些人
【发布时间】:2015-02-03 03:40:27
【问题描述】:

假设我有这些数据:

set.seed(123)
data <- data.frame(IndID = rep(c("AAA", "BBB", "CCC", "DDD", "EEE"),10),
    ValueOne = rnorm(50),
    ValueTwo = rnorm(50))
head(data)

其中有来自 5 个人 (AAA - EEE) 的两个不同值的 50 次观察。

我想对示例数据进行子集化以排除 Inds “AAA”、“BBB”和“EEE”,并将它们命名为一个新对象。

RemoveInds <- c("AAA","BBB","EEE")

我将如何创建一个新的data.frame 来排除这些人并使用对象RemoveInds 这样做?

我在这里缺少什么?

newData <- data[data$IndID != RemoveInds,]
newData <- subset[data, data$IndID != RemoveInds]

提前致谢。

【问题讨论】:

  • 谢谢!非常有帮助。发布为答案...
  • 你也可以使用grepl(虽然在这种情况下有点笨拙)data[!grepl(paste(RemoveInds, collapse = "|"), data$IndID), ]
  • @DavidArenburg -- grepl 在这里非常危险,因为它将其第一个参数视为正则表达式而不是要精确匹配的字符串。比较例如grepl("a", "bat")"a" %in% "bat"——他们根本没有做同样的事情。
  • @JoshO'Brien 我知道。但你是对的,我应该提到这一点。我只给出了一个适用于提供的数据集的替代解决方案。
  • @DavidArenburg -- 我应该更清楚一点,我只是为了新 R 用户的利益而添加评论,否则他们可能会看到你的建议并说“嘿,这是 @987654331 的一个很酷的替代方案@"。干杯。

标签: r subset


【解决方案1】:

这是否符合您的要求?

newdata<- data[!data$IndID %in% RemoveInds, ]

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2011-09-11
    • 1970-01-01
    • 2011-10-27
    • 2021-11-07
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多