r - 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() 仍然返回相同的输出。
解决方案
如果“项目”是factor
,则可能是未使用的级别。如果我们检查levels
,它仍然存在
levels(data2$Item)
#[1] "A" "B" "Z"
我们可以使用droplevels
table(droplevels(data2$Item))
# A B
#1 1
或指定.drop
在count
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")
推荐阅读
- python - 数百万对单个 int 与一批(2 到 100)个 int 配对的最佳数据类型(就速度/RAM 而言)
- python - 为什么我的抓取脚本返回空结果
- r - Excel:合并数据集中的重复列
- java - 排序数组与哈希表:在日历应用程序中搜索一系列日期时,哪种数据结构更有效?
- javascript - Set-cookie 标头不存在于前端,但在使用 ARC 或 Wireshark 进行测试时存在
- javascript - 如何更改类中元素的样式
- python - 用另一个数据框迭代更新数据框的值
- sql - 3 天交易的运行平均值,然后为交易假期填充该值
- c++ - 如何在 std::ofstream 和 std::cerr 之间切换
- python - OpenCv 索引如何工作?