【问题标题】:Count number of paired occurrences in R?计算R中成对出现的次数?
【发布时间】:2013-05-28 06:18:50
【问题描述】:

我想要做的是检查 x 和 y 值的有序对的数据框(在这个特定的集合中只有 4 个可能的值)并计算每个特定值发生的次数。

例如,我的数据框的第 1 列和第 2 列如下:

data <- data.frame(col1=c(-.25, 0, -.25, -.77, 0, 0, 0, -2.5),
                   col2=c(0.9, 0, 0.9, 2.9, 0, 0, 0, 0.9))

我想计算每对可能出现的次数。我发现的最接近的东西是table(),它返回 16 个可能的值,这不是我需要的。 IE,我试试

test=as.data.frame(table(data[,1:2]))

将两列作为测试提供给表格。我得到的是一个枚举 9 个“可能”组合的矩阵 - 我猜它的作用只是交叉引用每个列值并计算它出现的次数。

编辑:我意识到表格第三列中的非零条目是我想要的,但我最终需要它来执行总共 24 个集合的事情,所以它应该尽可能自动化。

【问题讨论】:

  • 你能举一个可重现的小例子吗?预期的结果会是什么样子?尽可能使用代码折叠。
  • 我不确定table(data) 是如何做到这一点的。它确实提供了两列中每个可能配对的计数。您只需要删除零值吗?
  • 是的,我基本上只需要删除零值。我只是玩得更远,并注意到了这一点。

标签: r


【解决方案1】:

考虑到大量的集合 (24),table 可能会创建太多组合。您可以使用这种替代方法:

data$count <- 1
aggregate(count ~ ., data, FUN = sum)
#    col1 col2 count
# 1  0.00  0.0     4
# 2 -2.50  0.9     1
# 3 -0.25  0.9     2
# 4 -0.77  2.9     1

【讨论】:

    【解决方案2】:

    子集test 删除零值:

    test=as.data.frame(table(data[,1:2]))
    test <- test[which(!test$Freq==0),]
    
    ##    col1 col2 Freq
    ##4      0    0    4
    ##5   -2.5  0.9    1
    ##7  -0.25  0.9    2
    ##10 -0.77  2.9    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多