【问题标题】:How create the frequency table with multiple columns in R?如何在 R 中创建具有多列的频率表?
【发布时间】:2017-05-22 01:16:10
【问题描述】:

我正在尝试制作一个包含多列的频率表。 我的数据是

C = as.factor(sample( LETTERS[1:2], 100, replace = TRUE, prob = c(rep(1/2, 2))))
R1 = sample(c(-1, 1), 100, replace = TRUE)
R2 = sample(c(-1, 1), 100, replace = TRUE)
R3 = sample(c(-1, 1), 100, replace = TRUE)
data = data.frame(R1, R2, R3, C)
rowb = expand.grid(data.frame(r1 = c(-1, 1), r2 = c(-1, 1), r3 = c(-1, 1)))

我的目标频率表是该行包含rowb的组合,列是C。 此时,R1、R2R3与该行匹配。 如果未找到匹配项,则元素的值为零。

我附上了目标频率表的结构。

【问题讨论】:

  • 不清楚您的预期输出是什么?图中显示的“A”和“B”是什么
  • 或许library(data.table);dcast(setDT(data), R1+R2+R3~C, length)
  • 谢谢你,阿克伦!我的问题有点不准确...

标签: r multiple-columns frequency contingency


【解决方案1】:

根据您提供的图像,您似乎只想创建一个连接 R1-3 的新变量,然后用 C 制表;你可以使用paste():

data$comb <- factor(paste(data$R1, data$R2, data$R3),
# make sure the levels are in the right order:
                    levels = paste(rowb$r1, rowb$r2, rowb$r3))

table(data$comb, data$C)

输出

            A  B
  -1 -1 -1  5  5
  1 -1 -1   6  4
  -1 1 -1   6  5
  1 1 -1    8 10
  -1 -1 1   7  4
  1 -1 1    9  5
  -1 1 1    5  7
  1 1 1     4 10

【讨论】:

    【解决方案2】:

    我们可以使用来自data.tabledcast 并加入'rowb'

    library(data.table)
    dcast(setDT(data), R1+R2+R3~C, length)[rowb, on = .(R1=r1, R2 = r2, R3 = r3)]
    

    或者先加入然后dcast

    dcast(setDT(data)[rowb , on = .(R1=r1, R2 = r2, R3 = r3)], ...~C)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多