首页 > 解决方案 > R - 过滤数据集中的因子计数

问题描述

我有以下格式的数据集 -

Item Year
A    2018
B    2018
B    2019
A    2017
Z    2019

我仅使用 2018 年选择项目:

library(dplyr)
data2 <- data %>% filter(Year == "2018")

现在,当我使用 table() 获取项目计数时,出现了问题。输出看起来像 -

table(data2$Item)

A B Z
1 1 0

我不明白为什么 Z 包含在这里。data2 中没有 Z 项。它弄乱了汇总统计数据。

有什么方法可以防止包含原始数据集中的项目?我尝试在没有 dplyr 的情况下过滤原始数据集,但 table() 仍然返回相同的输出。

标签: r

解决方案


如果“项目”是factor,则可能是未使用的级别。如果我们检查levels,它仍然存在

levels(data2$Item)
#[1] "A" "B" "Z"

我们可以使用droplevels

table(droplevels(data2$Item))
#  A B 
#1 1 

或指定.dropcount

library(dplyr)
data %>%
    filter(Year == "2018") %>% 
    count(Item, .drop = TRUE)
#  Item n
#1    A 1
#2    B 1

数据

data <- structure(list(Item = structure(c(1L, 2L, 2L, 1L, 3L), .Label = c("A", 
"B", "Z"), class = "factor"), Year = c(2018L, 2018L, 2019L, 2017L, 
2019L)), row.names = c(NA, -5L), class = "data.frame")

推荐阅读