【问题标题】:loop for creating the cross table用于创建交叉表的循环
【发布时间】:2014-06-13 18:02:59
【问题描述】:

我正在尝试一个循环来创建交叉表。我的数据集是:21 列,1300 行。 我想为第 1 列和第 1 列、第 1 列和第 2 列、第 1 列和第 3 列、...、第 1 列和第 21 列创建交叉表。 我使用函数“table”并尝试循环。她是我的代码:

x=data
for (i in length (x)){tab[i]=table(x[,1],x[i])

其中 tab 是交叉表的输出。

我尝试运行,但失败了。你能告诉我如何解决这个问题吗? 它给出了 20 个相同的警告: 在 tab[i]=table(x[,1],x[,i]) 要替换的项目数不是替换长度的倍数

【问题讨论】:

  • 您希望输出采用什么格式?您是否在循环之外定义了tabfor (i in length(x)) 只会为值 i=length(x) 运行一次。 class(x) 是什么? x[,1]x[i] 似乎不太可能按照您对同一对象的预期方式工作。
  • 我没有定义选项卡,因为我不知道在使用循环时如何定义。如果是单一案例,我知道如何定义选项卡。例如,a=x[,1],b=x[,2],tab=table(a,b)。对于 (i in ncolumn(x)){tab[i]=table(x[,1],x[i])。格式应该像一个交叉表。
  • 我不知道什么是“交叉表”。你能举个例子吗?
  • @MrFlick - 我认为交叉表是指跨所有列的频率表...
  • @MrFlick 例如,a=data[,1] 和 b=data[,2]。 a,b 具有分类编码(1 或 2)。我想知道 a 和 b 之间是如何组成的,所以交叉表显示了同一位置的 a 和 b 中有多少个 1,以及 a 和 b 中有多少个 2。这是一个描述频率表的链接link

标签: r


【解决方案1】:

这可能有帮助

set.seed(25)
mat1 <- matrix( sample(1:10, 100,replace=TRUE), 10,10)

fun1 <- function(dat, colN) {
tab <- vector("list", colN)
for (i in seq_len(ncol(dat))) {
    tab[[i]] <- table(dat[, 1], dat[, i])
   }
  tab
}

res <- fun1(mat1, 10) ##change the column number accordingly

【讨论】:

  • 但是,我可以单独看一下 tab[[1]] 吗?例如,我想查看选项卡 [[1]]。因为我想为每个选项卡获取 phi 系数或 cohen.kappa。 'phi(tab[[1]]) cohen.kappa(tab[[1]])'
  • 是的,您可以提取列表组件。在上面的示例中,res[[1]]、res[[2]] 等。请提供您用于 ?phi、?cohen.kappa 的包。
  • 谢谢!我输入了 res [[1]],它可以工作。包是“psych”。link这里是包。要获取 phi 和 kappa,我之前尝试过。例如,'a=c(1,1,1,1)' 'b=c(1,1,2,2)' 'tab=table(a,b)' 'phi(tab)' 'cohen.卡帕(制表符)'。
  • 你给出的例子 Errors: phi(tab) Error: prod(dim(t)) == 4 ||长度(t)== 4 不正确
  • 也许“psch”将安装在另一个版本R下。我尝试使用循环结合你的代码s1=rep(0,21)``for (i in 1:21){s1[i]=phi(res[[i]])}s1,但是对于cohen.kappa,我无法通过循环获得它。我只能一次获得它。例如,cohen.kappa(res[[1]])。它向我展示了 Cohen Kappa 和加权 Kappa 相关系数和置信边界下估计 未加权 kappa 上限 1 1 1 加权 kappa 1 1 1 受试者数量 = 1300
猜你喜欢
  • 2021-11-20
  • 2022-06-14
  • 1970-01-01
  • 2013-06-29
  • 2017-03-07
  • 2017-12-07
  • 2018-10-01
  • 1970-01-01
  • 2018-10-02
相关资源
最近更新 更多