【发布时间】:2014-04-12 19:03:18
【问题描述】:
标题说明了一切。我在互联网上搜索了很多,但我无法找到答案。
这个主题"Make Frequency Histogram for Factor Variables" 完全符合我的需要,但用于绘图而不是用于表格。我有一个有序因子变量,我需要计算每个级别的相对百分比和累积百分比,就好像它是一个数值一样。我想计算百分比并将它们保存在单独的表中。 有什么建议? 先感谢您。
【问题讨论】:
标题说明了一切。我在互联网上搜索了很多,但我无法找到答案。
这个主题"Make Frequency Histogram for Factor Variables" 完全符合我的需要,但用于绘图而不是用于表格。我有一个有序因子变量,我需要计算每个级别的相对百分比和累积百分比,就好像它是一个数值一样。我想计算百分比并将它们保存在单独的表中。 有什么建议? 先感谢您。
【问题讨论】:
这是你的意思吗:
X <- sample(LETTERS[1:5],1000,replace=T)
X <- factor(X, ordered=T)
prop.table(table(X))
# X
# A B C D E
# 0.210 0.187 0.180 0.222 0.201
cumsum(prop.table(table(X)))
# A B C D E
# 0.210 0.397 0.577 0.799 1.000
这基本上只是@Roland 对您引用的问题的回答??
编辑(回应 OP 的评论)
Y <- table(X)
str(Y)
# 'table' int [1:5(1d)] 205 191 200 183 221
# - attr(*, "dimnames")=List of 1
# ..$ X: chr [1:5] "A" "B" "C" "D" ...
Z <- c(table(X))
str(Z)
# Named int [1:5] 205 191 200 183 221
# - attr(*, "names")= chr [1:5] "A" "B" "C" "D" ...
所以Y 属于“表”类,而Z 是命名整数向量。主要区别在于各种 R 函数处理不同类的方式。试试plot(Y) 和plot(Z) 或data.frame(Y) 和data.frame(Z)。但是请注意,(例如)sum(Y) 和 sum(Z) 返回相同的内容。
【讨论】:
试试 fdth 包:
library(fdth)
set.seed(2019)
X <- sample(LETTERS[1:5],
1000,
replace=T)
X <- factor(X,
ordered=T)
tb <- fdt_cat(X)
summary(tb)
# Category f rf rf(%) cf cf(%)
# B 223 0.22 22.3 223 22.3
# A 210 0.21 21.0 433 43.3
# C 191 0.19 19.1 624 62.4
# D 188 0.19 18.8 812 81.2
# E 188 0.19 18.8 1000 100.0
【讨论】: