【问题标题】:R get the levels associated with the maximum value in a multidimensional contingency tableR获取与多维列联表中最大值关联的级别
【发布时间】:2018-10-12 16:15:23
【问题描述】:

用一个简单的向量比如

x <- sample(letters[1:3], size=20, replace=T)

我会用类似的东西提取最常见的字母

y <- table(x)
print(names(y)[y==max(y)])
"b"

但是,在多维数据帧上使用相同的技术是行不通的:

set.seed(5)
x <- data.frame(c1=sample(letters[1:3], size=30, replace=T),
                c2=sample(letters[4:5], size=30, replace=T),
                c3=sample(letters[6:10], size=30, replace=T))
y <- table(x)

print(names(y)[y==max(y)])
NULL

如何提取列联表中值最高的 c1、c2 和 c3 的级别?

我知道我可以将表格转换为数据框并找到 Freq 列最高的行,但考虑到我的数据集中的维度和级别数,转换为数据框不适合我的 RAM 内存。

编辑:所以我在第二种情况下的预期输出将是c, d, j,如:

z <- data.frame(y)
z[z$Freq==max(z$Freq), 1:3]
   c1 c2 c3
27  c  d  j

但请注意,由于 RAM 问题,我无法对我的数据使用 data.frame 调用。

【问题讨论】:

    标签: r contingency


    【解决方案1】:

    您可以将whicharr.ind = TRUE 一起使用:

    mapply("[", 
           dimnames(y), 
           as.data.frame(which(y == max(y), arr.ind = TRUE)))
    # c1  c2  c3 
    #"c" "d" "j"
    
    mapply("[", 
           dimnames(y), 
           as.data.frame(which(y == min(y), arr.ind = TRUE)))
    #      c1  c2  c3 
    # [1,] "a" "d" "f"
    # [2,] "b" "d" "g"
    # [3,] "c" "d" "g"
    # [4,] "b" "e" "g"
    # [5,] "a" "d" "h"
    # [6,] "b" "d" "h"
    # [7,] "c" "d" "h"
    # [8,] "c" "e" "h"
    # [9,] "a" "e" "i"
    #[10,] "b" "e" "i"
    #[11,] "c" "e" "i"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2021-03-24
      • 1970-01-01
      • 2020-10-12
      • 2022-12-09
      • 2020-12-24
      相关资源
      最近更新 更多