【问题标题】:R: Count or contingency tables produced using a loopR:使用循环生成的计数或列联表
【发布时间】:2017-07-02 16:29:59
【问题描述】:

我是 R 编程的新手,所以我寻求帮助来开始我的工作。 我有一个包含 4 列的“长”数据集(我之前在 R 中对其进行了重新调整):

d=matrix(c(1,2,3,4,5,6,7,"A","A","A","B","B","B","B",0,0,99,0,0,99,0,99,0,99,99,0,0,99), ncol=4)
colnames(d) = c("ID","S.ID","ValA","ValB"); dt=as.table(d)

我想为每个 S.ID(即 A 和 B)分别创建一个 ValA 和 ValB 计数的列联表

例如(这里)--

在我的实际示例中,我有 17 个 S.ID,我想编写一个程序来为每个 S.ID 生成列联表。

另外,这在 R Studio 中会更容易吗?如果是这样,请您也详细说明一下如何?

非常感谢!

-感谢所有如此迅速回答的人! :)

【问题讨论】:

标签: r loops contingency


【解决方案1】:

您可以在多个变量上使用table

with(as.data.frame(d), table(ValA, ValB, S.ID))

# , , S.ID = A
#    ValB
#ValA 0 99
#  0  1  1
#  99 0  1

#, , S.ID = B
#    ValB
#ValA 0 99
#  0  1  2
#  99 1  0

【讨论】:

    【解决方案2】:

    使用tapplyby需要转换为data.frame:

    d<-data.frame(d)
    by(d, d$S.ID, function(grouped.d) table(grouped.d$ValA, grouped.d$ValB))
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      d <- as.data.frame(d)
      l <- lapply(unique(d$S.ID), function(x) xtabs(~ValB+ValA, subset(d, S.ID==x)))
      names(l) <- unique(d$S.ID)
      l
      #$A
      #    ValA
      #ValB 0 99
      #  0  1  0
      #  99 1  1
      
      #$B
      #    ValA
      #ValB 0 99
      #  0  1  1
      #  99 2  0
      

      【讨论】:

        猜你喜欢
        • 2013-12-16
        • 1970-01-01
        • 2020-05-15
        • 2020-08-07
        • 2016-09-21
        • 1970-01-01
        • 2021-11-16
        • 2018-10-10
        相关资源
        最近更新 更多