【发布时间】:2015-12-29 17:15:59
【问题描述】:
我想排除包含特定值的观察。 也就是说,我的专栏中的观察结果如下所示:501.512.518。 这些代表每次观察的三个不同的个体。 现在我想排除所有包含例如的观察。个人512
有没有办法创建子样本,可以排除包含值 512 但不等于或以值 512 开头的观测值?
【问题讨论】:
标签: r
我想排除包含特定值的观察。 也就是说,我的专栏中的观察结果如下所示:501.512.518。 这些代表每次观察的三个不同的个体。 现在我想排除所有包含例如的观察。个人512
有没有办法创建子样本,可以排除包含值 512 但不等于或以值 512 开头的观测值?
【问题讨论】:
标签: r
这个问题缺少一些细节,但我希望这能有所帮助。我会使用 grepl 函数。
为了删除数据集中(其中一个)列(表示为 col)包含(但不以)512 开头的所有行,请执行以下操作:
newDF <- oldDT[!grepl('.512', oldDF$col), ]
grepl('.512', oldDF$col) 将在每次列“col”具有模式“.512”时返回具有 TRUE 的逻辑向量在里面。
它前面的 ! 将否定它,从而删除这些行。
希望对您有所帮助。
【讨论】:
fixed 到 grepl 的参数来加快速度)。
如果您有一个更具体的示例但做出一些假设,并且使用dplyr 您可以执行以下操作,将会很有帮助:
exclusion_values <- c(501, 512, 518)
new_df <- old_df %>% filter(! col_of_interest %in% exclusion_values)
这是你要找的吗?
【讨论】:
@steveb 提供的答案很棒,但您可能想要一个基本的 R 替代方案:
mtcars 数据集示例
df <- data.frame(Group = rep(c('A', 'B', 'C', 'D'), 50),
Number = sample(500:600, 200, replace = T))
to_drop
df <- df[!(df$Number %in% to_drop),]
> df
Group Number
1 A 518
2 B 536
3 C 518
4 D 505
5 A 544
6 B 511
7 C 507
【讨论】: