r - 按因子过滤后如何删除未使用的级别?

标签 r dplyr

这是一个取自 a fellow SO member 的示例.

# define a %not% to be the opposite of %in%
library(dplyr)
# data
f <- c("a","a","a","b","b","c")
s <- c("fall","spring","other", "fall", "other", "other")
v <- c(3,5,1,4,5,2)
(dat0 <- data.frame(f, s, v))
#  f      s v
#1 a   fall 3
#2 a spring 5
#3 a  other 1
#4 b   fall 4
#5 b  other 5
#6 c  other 2
(sp.tmp <- filter(dat0, s == "spring"))
#  f      s v
#1 a spring 5
(str(sp.tmp))
#'data.frame':  1 obs. of  3 variables:
# $ f: Factor w/ 3 levels "a","b","c": 1
# $ s: Factor w/ 3 levels "fall","other",..: 3
# $ v: num 5

filter()产生的df保留了原始 df 的所有级别。

删除未使用级别的推荐方法是什么,即 "fall""others" ,在dplyr内框架?

最佳答案

你可以这样做:

dat1 <- dat0 %>%
  filter(s == "spring") %>% 
  droplevels()

然后

str(df)
#'data.frame':  1 obs. of  3 variables:
# $ f: Factor w/ 1 level "a": 1
# $ s: Factor w/ 1 level "spring": 1
# $ v: num 5

关于r - 按因子过滤后如何删除未使用的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826865/

相关文章:

r - 无法在 bookdown 中插入图

R 使用 ggplot 添加对交互图的调整

r - 大型 JSON 列表到整洁的表格

r - 计算R中向量中重复数字序列的长度

r - 如何迭代创建列?

r - 使用 mailR 将 data.frame 添加到电子邮件

r - 如何从数据库中过滤日期数字、不完整日期和 NA 并转换为 r 中的统一日期类

r - 如何更改 R 中的 t-sne 距离?

r - dplyr中select()的contains()和matchs()之间的区别

r - 与 tidyr::separate 相反,将多列连接成一列