我想删除未发生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/