R语言临时移除Unknown层级生成prop.table的问题与解决
临时移除向量层级生成prop.table的问题及解决
我是R语言新手,手中有一个包含5个层级的向量:
c("Unknown", "Less than 2 hours", "2-4 hours", "4-6 hours", "6+ hours")
常规分析中需要保留Unknown层级,但我希望临时移除它,生成不受其干扰的prop.table,避免百分比被偏差影响。
当前代码及输出
prop.table(table(x)
输出:
### Unknown Less than 2 hours 2-4 hours 4-6 hours 6+ hours 0.0002766941 0.4163692206 0.3599789713 0.1509642788 0.0724108353
尝试过的无效方法
- 直接在
prop.table中排除层级:
prop.table(x[x %in% c('Less than 2 hours', '2-4 hours', '4-6 hours', '6+ hours')]) prop.table(table(factor(tgi.model$hourswatching_TV), exlude = "Unknown"))
- 将
Unknown转为NA后处理:
x <- factor(c("Unknown", "Less than 2 hours", "2-4 hours", "4-6 hours", "6+ hours")) levels(x)[levels(x)=='Unknown'] <- NA na.omit(x) is.numeric(na.omit(x))
多种移除NA的方式均失败,怀疑是格式问题。
解决方案
是典型的漏写错误,最初的代码缺少了table()包裹筛选后的向量:
prop.table(table(x[x %in% c('Less than 2 hours', '2-4 hours', '4-6 hours', '6+ hours')]))
输出:
### Unknown Less than 2 hours 2-4 hours 4-6 hours 6+ hours 0.00000000 0.57857722 0.24993238 0.11604003 0.05545037
更高效的方法推荐
如果想直接移除输出中的Unknown列,可以先生成表格后筛选掉该层级,再计算比例:
# 先统计频率并排除Unknown层级 tv_table <- table(x)[names(table(x)) != "Unknown"] # 计算比例 prop.table(tv_table)
如果是处理数据框,也可以用dplyr包更简洁实现:
library(dplyr) df %>% filter(hourswatching_TV != "Unknown") %>% count(hourswatching_TV) %>% mutate(prop = n / sum(n))
内容的提问来源于stack exchange,提问作者Adam Swan-Bell
相关产品推荐
相关产品推荐

