首页 > 解决方案 > 循环创建双变量/交叉表

问题描述

我正在尝试创建一个循环,我想在其中获取第 1 列和第 2 列、第 1 列和第 3 列之间的频率......直到 col1 和 col30。

Col1 col2 col3
0        A     25
1        A     30
0        A     30
1        B     20
0        B     20

输出。

     0    1               0      1
 A   2    1         25    0      0
 B   1    1         30    1      1
                    20    1      1

标签: r

解决方案


我们可以用tidyverse

library(tidyverse)
map(names(df)[-1], ~  cbind(df[1], df[.x]) %>% 
           count(Col1, !! rlang::sym(.x)) %>%
           spread(Col1, n, fill = 0))

数据

df <- structure(list(Col1 = c(0L, 1L, 0L, 1L, 0L), col2 = structure(c(1L, 
1L, 1L, 2L, 2L), .Label = c("A", "B"), class = "factor"), col3 = c(25L, 
30L, 30L, 20L, 20L)), class = "data.frame", row.names = c(NA, -5L))

推荐阅读