【发布时间】:2014-10-10 03:54:56
【问题描述】:
我是 R 的新手。我正在为我的工作编写一份关于常用函数/特性的语法的单独手册。我的示例数据框如下:
x.sample <-
structure(list(Q9_A = structure(c(5L, 3L, 5L, 3L, 5L, 3L, 1L,
5L, 5L, 5L), .Label = c("Impt", "Neutral", "Not Impt at all",
"Somewhat Impt", "Very Impt"), class = "factor"), Q9_B = structure(c(5L,
5L, 5L, 3L, 5L, 5L, 3L, 5L, 3L, 3L), .Label = c("Impt", "Neutral",
"Not Impt at all", "Somewhat Impt", "Very Impt"), class = "factor"),
Q9_C = structure(c(3L, 5L, 5L, 3L, 5L, 5L, 3L, 5L, 5L, 3L
), .Label = c("Impt", "Neutral", "Not Impt at all", "Somewhat Impt",
"Very Impt"), class = "factor")), .Names = c("Q9_A", "Q9_B",
"Q9_C"), row.names = c(NA, 10L), class = "data.frame")
> x.sample
Q9_A Q9_B Q9_C
1 Very Impt Very Impt Not Impt at all
2 Not Impt at all Very Impt Very Impt
3 Very Impt Very Impt Very Impt
4 Not Impt at all Not Impt at all Not Impt at all
5 Very Impt Very Impt Very Impt
6 Not Impt at all Very Impt Very Impt
7 Impt Not Impt at all Not Impt at all
8 Very Impt Very Impt Very Impt
9 Very Impt Not Impt at all Very Impt
10 Very Impt Not Impt at all Not Impt at all
我的原始数据框有 21 列。
如果我想求均值(将其视为序数变量):
> sapply(x.sample,function(x) mean(as.numeric(x), na.rm=TRUE))
Q9_A Q9_B Q9_C
4.0 4.2 4.2
我想为我的数据框中的所有变量制作一个频率表。我搜索了互联网和许多论坛,发现最近的命令是使用 sapply。但是当我这样做的时候,它全是 0。
> sapply(x.sample,function(x) table(factor(x.sample, levels=c("Not Impt at all", "Somewhat Impt", "Neutral", "Impt", "Very Impt"), ordered=TRUE)))
Q9_A Q9_B Q9_C
Not Impt at all 0 0 0
Somewhat Impt 0 0 0
Neutral 0 0 0
Impt 0 0 0
Very Impt 0 0 0
问题 如何使用 sapply 根据上表为数据框中的所有列(即因子)制作频率图表?
PS 很抱歉,如果这看起来很琐碎,但我已经搜索了 2 天没有答案并尝试了所有可能的组合。可能是我搜索的不够仔细=(
非常感谢。
【问题讨论】:
-
不会
sapply(x.sample, table)做吗? -
@RichardScriven - 差不多。除了按照
factor排序重新排列输出之外,这一切都做了。 -
@Richard Scriven:我尝试了你的方法,但它返回了一个错误。 “无效的大小争论”。
-
@RaphaelLee - 它绝对有效。使用代码从您的问题中尝试您自己的
x.sample。