R - 删除出现 != n 次的行

标签 r

我想删除未发生n次的行。因此,如果我的因子变量发生 != n 次,我想删除所有此类因子变量。

示例数据:

df <- data.frame( 
  my_factor = factor(rep(1:24, each = 10)),
  value     = runif(240, min = -10, max = 125)
)
# Each factor appears 10 times

# Adding a row, that makes my_factor == 23 appear 11 times
x <- data.frame(
  my_factor = 23, 
  value = 100)

df <- rbind(df, c(23, 100))

现在我想看看我的 my_factor 出现了多少次,并且能够删除出现次数与 n 不同的所有行。

在数据示例中,我想删除所有等于 23 的因子变量。

我尝试过使用rle来攻击它,但我似乎无法将它与subset一起使用

y <- rle(as.character(df$my_factor))
y$lengths != 10

df[y$lengths != 10, ] # Wrong output

最佳答案

您可以使用table来代替:

table(df$my_factor) != 10
# 
#     1     2     3     4     5     6     7     8     9    10    11 
# FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
#    12    13    14    15    16    17    18    19    20    21    22 
# FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
#    23    24 
#  TRUE FALSE 
names(which(table(df$my_factor) != 10))
# [1] "23"
df[!df$my_factor %in% names(which(table(df$my_factor) != 10)), ]

ave 也可以使用:

df[ave(1:nrow(df), df$my_factor, FUN = length) == 10, ]

或者,使用“data.table”:

library(data.table)
setDT(df)[, N := .N, by = my_factor][N == 10]

关于R - 删除出现 != n 次的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25379284/

相关文章:

r - 在 R 代码中为路段(纬度经度)分配 ID

循环运行 H2O 的 Auto ML

r - glmnet 预测方法抛出神秘错误

r - 在安装 R 包之前提示用户

r - 使用 geom_bar 的 ggplotly 缺少工具提示和冗余图例

R:使用因子变量删除逻辑变量中的数据

r - heckman 模型的预测函数

r - 将两个嵌套 tibble 变量相乘

r - ggplot2 添加指向特定数据点的动态箭头注释,这些数据点与整个图的比例保持比例

regex - 查找第三次出现的特殊字符并删除 R 中之前的所有内容