【发布时间】: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 的一个很酷的替代方案@"。干杯。