【问题标题】:Create frequency table multiple variables-different number of rows创建频率表多个变量-不同的行数
【发布时间】:2014-08-01 15:20:27
【问题描述】:

我是 R 新手,如果这是一个基本问题,我深表歉意。我有一个 data.frame,其中所有 14 个变量都是因素。我有 11 个测量变量,它们是 10 个不同级别中的 1 个,但并非所有变量都包含所有级别。我想创建一个频率表,其中测量变量作为列,水平作为所有 11 个测量变量的行。

我的data.frame的结构如下:

Publication: Factors.. 2 levels
Year: Factors... 5 levels
Energy Type: Factors... 6 levels
AQ: Factors... 3 levels
CA:  Factors... 9 levels
CCM: Factors... 8 levels
FFR: Factors: 5 levels

(我的表格在显示窗口中的格式不正确)

我想获得一个频率表,其中包括所有测量变量(例如 AQ、CA、CCM、FFR)作为列和水平作为行 - 在变量不包括特定水平的地方插入 NA。

我首先尝试创建多个表,然后使用 rbind——但并非所有测量变量都包括所有级别——因此该表不准确。我尝试了 rbind.fill,它要求输入为 data.frames(而不是表),但这导致将表转换为 data.frames 时遇到困难......我也尝试过重塑和转换数据,但我没有认为重塑是我的问题的解决方案......

感谢任何帮助都是解决此问题的最佳方法。
米歇尔

这是我的表的示例:

Publication         Year    AQ  CCM CA
Bangor Daily News   2006    No  No  No
Bangor Daily News   2006    No  No  R1
Bangor Daily News   2006    No  No  C1
Bangor Daily News   2006    No  No  No
Bangor Daily News   2006    No  No  C1

【问题讨论】:

  • 如果您提供一个小的示例数据集和您的预期结果会更容易

标签: r frequency


【解决方案1】:

不确定预期的结果:

数据

dat1 <- structure(list(Publication = structure(c(1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L), .Label = c("1", "2"), class = "factor"), 
Year = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L
), .Label = c("2004", "2005", "2006", "2007", "2008"), class = "factor"), 
AQ = structure(c(5L, 5L, 2L, 5L, 4L, 3L, 4L, 1L, 4L, 4L), .Label = c("a", 
"b", "c", "d", "e"), class = "factor"), CA = structure(c(3L, 
4L, 5L, 2L, 3L, 5L, 5L, 1L, 3L, 3L), .Label = c("b", "c", 
"d", "e", "f"), class = "factor"), CCM = structure(c(4L, 
1L, 4L, 4L, 1L, 3L, 2L, 4L, 3L, 4L), .Label = c("d", "e", 
"f", "h"), class = "factor")), .Names = c("Publication", 
"Year", "AQ", "CA", "CCM"), row.names = c(NA, -10L), class = "data.frame")

measured variables创建唯一的元素列表

Un <- unique(unlist(dat1[,3:5]))

将levels设置为Un的levels后,使用table获取每列的频率

res <- sapply(dat1[,3:5], function(x) table(factor(x, levels=levels(Un))))
res[!res] <- NA # change 0's to NA
res 
#   AQ CA CCM
# a  1 NA  NA
# b  1  1  NA
# c  1  1  NA
# d  4  4   2
# e  3  1   1
# f NA  3   2
# h NA NA   5

【讨论】:

  • 感谢您的回复 Akrun。你的决赛桌就是我所追求的。我对您的第一个语句的“...=structure(c(1L,1L,1L,2L,2L....)”部分有疑问。我有 452 条记录-您的方法是否需要列出整个结构?我尝试输入每个变量存在的值(级别),但收到一条错误消息,指出“对象”对于至少一个级别不存在。
  • @mdebartolo。我使用dput(dat1) 来获得该结构以便于重现。您可以使用read.table/read.csv 等读取您的数据集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2020-07-01
  • 2012-08-25
相关资源
最近更新 更多