我有一个具有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为mid时V2低/中/高的频率是多少?
V1为high时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
我该如何解决这个问题?
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)
library(tidyverse)
df %>%
pivot_longer(everything(), names_to = "col", values_to = "val") %>%
mutate(col2 = col) %>%
group_by(col, val, col2) %>%
summarise(ct = n())
数据:
strata <- c("low", "med", "high", NA)
get_levels <- function(n) sample(strata, n, replace = TRUE)
df <- tibble(V1 = get_levels(10),
V2 = get_levels(10),
V3 = get_levels(10),
V4 = get_levels(10))