【问题标题】:How do I count the associations between each variable and value in R?如何计算 R 中每个变量和值之间的关联?
【发布时间】:2020-02-04 19:27:09
【问题描述】:

我有一个包含 31 列 (V1:V31) 的大型数据框和大量具有不同 V1:V31 组合的行。 NA 表示该变量何时不是组合的一部分。下面的示例是我的数据的一个子集,其中只有前 8 个变量和前 5 个组合。我将每个变量的值分为低/中/高。

   V1  V2   V3   V4   V5   V6   V7   V8 
1 Low Low High <NA> <NA> <NA> <NA> <NA>
2 Low Low <NA> High <NA> <NA> <NA> <NA> 
3 Low Low <NA> <NA> High <NA> <NA> <NA> 
4 Low Low <NA> <NA> <NA> <NA> High <NA> 
5 Low Low <NA> <NA> <NA> <NA> <NA> High 

我试图找到的是具有一个值(低/中/高)的变量与另一个变量的值(低/中/高)相关联的次数。

例如:

当 V1 时,V2 低/中/高的频率是多少?

当 V1 时,V2 低/中/高的频率是多少?

当 V1 时,V2 低/中/高的频率是多少?

当 V2 时,V3 低/中/高的频率如何?

等等。

预期结果:

V1low <- data.frame()

   Low Mid High    
V2 11  3   4 
V3 45  5   34 
V4 3   67  5 
V5 6   45  5 

V1mid<- data.frame()

   Low Mid High    
V2 11  3   4 
V3 45  5   34 
V4 3   67  5 
V5 6   45  5 

V1high<- data.frame()

   Low Mid High    
V2 11  3   4 
V3 45  5   34 
V4 3   67  5 
V5 6   45  5 

V2low<- data.frame()

   Low Mid High    
V3 11  3   4 
V4 45  5   34 
V5 3   67  5 
V6 6   45  5 

我该如何解决这个问题?

使用@dario 的解决方案进行编辑:

> results <- table(Pvart2$V1, Pvart2$V2, Pvart2$V3, Pvart2$V4, useNA="always",deparse.level = 2)
> results
, , Pvart2$V3 = High, Pvart2$V4 = High

         Pvart2$V2
Pvart2$V1 High  Low  Med <NA>
     High    0    0    0    0
     Low     0    0    0    0
     Med     0    0    0    0
     <NA>    0    0    0    2

在高于两个维度的情况下,每个数据帧的条件变得过高,导致结果过多。上面的示例在 V3 为高电平且 V4 为高电平时查找 V1 和 V2 的值。但是在我拥有的 2700 行组合中,这个条件永远不会满足。成对方面也会产生很多我无法快速查看的数据。对于每个低 V1,像预期结果这样的东西会更易于管理,它告诉我每个变量 V1 与多少低/中/高相关联。

【问题讨论】:

    标签: r dataframe associations


    【解决方案1】:

    不确定我是否理解您的问题,但我认为您可以使用 table 来做到这一点:

    创建一个最小的示例data.frame:

    df <- data.frame(V1= c("low", "mid", "low", "high", "low"),
                     V2=c("mid", "high", NA, "high", "mid"),
                     V3=c("high", NA, "mid", "mid", "mid"),
                     stringsAsFactors = FALSE)
    

    使用table 显示变量值对的频率。

    table(df$V1, df$V2, useNA="always",deparse.level = 2)
    

    我们还可以传递两个以上的“维度”:

    table(df$V1, df$V2, df$V3, useNA="always",deparse.level = 2)
    

    编辑:

    使用 dplyr 进行自定义选择的“手动”频率表

    df2 <- data.frame(V1= c("low", "mid", "low", "high", "low"),
                     V2=c("mid", "high", NA, "high", "mid"),
                     V3=c("mid", NA, "mid", "mid", "mid"),
                     stringsAsFactors = FALSE)
    
    
    library(dplyr)
    
    df2 %>% 
      filter(V1 == "low") %>%
      group_by(V1, V2, V3) %>% 
        summarise(N = n())
    

    【讨论】:

    • 感谢您的回复!这很接近。我想你明白我需要什么。它适用于二维,但使用 table 函数的结果在更高维度上变得不可用。检查我的编辑
    • 好的...仍然不能 100% 确定我是否了解您想要做什么,但这是另一种方式(见编辑)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多