三维列联表转化为带有类别频数的数据框R代码
时间: 2023-10-23 17:14:19 浏览: 44
假设现有一个三维列联表,其中变量A有a个类别,变量B有b个类别,变量C有c个类别,频数为counts,可以使用以下代码将其转化为带有类别频数的数据框:
```R
library(tidyr)
# 生成一个示例数据框
set.seed(123)
df <- data.frame(A = sample(letters[1:3], 50, replace = TRUE),
B = sample(letters[4:7], 50, replace = TRUE),
C = sample(letters[8:11], 50, replace = TRUE),
counts = sample(1:100, 50, replace = TRUE))
# 将三维列联表转化为数据框
df_long <- df %>%
pivot_longer(cols = c(B, C), names_to = "variable", values_to = "category") %>%
pivot_wider(names_from = "variable", values_from = "category")
# 计算每个ABC组合下的频数
df_freq <- df_long %>%
group_by(A, B, C) %>%
summarise(freq = sum(counts))
# 将频数添加回原数据框
df_result <- df %>%
left_join(df_freq, by = c("A", "B", "C"))
```
其中,第一个步骤使用`tidyr`包中的`pivot_longer()`函数将列联表中的B和C变量转化为两列,分别列出类别,得到一个长格式的数据框;第二个步骤使用`pivot_wider()`函数将数据框转化为三维列联表的形式;第三个步骤使用`dplyr`包中的`group_by()`和`summarise()`函数计算每个ABC组合下的频数;最后一个步骤将频数添加回原数据框。