我正在处理的df中的两个变量在每次观测中可能包含多个值。我想列出这些变量的频率,但不能在类型"list"上使用table((。。。我在下面创建了一个示例df:
col_a <- c("a", "b", "c", "a,b", "b,c")
col_b <- c("c", "b", "a", "a,a", "a,c")
df <- data.frame(col_a, col_b)
df <- df %>%
mutate(col_a = strsplit(df$col_a, ","),
col_b = strsplit(df$col_b, ",")
)
该输出:
col_a col_b
1 a c
2 b b
3 c a
4 c("a", "b") c("a", "a")
5 c("b", "c") c("a", "c")
现在,table(df$col_a, df$col_b)
返回Error in order(y) : unimplemented type 'list' in 'orderVector1'
。为了列出变量,我想取消列出连接的观察结果,使其看起来像这样:
col_a col_b
1 a c
2 b b
3 c a
4 a a
5 a a
6 b a
7 b a
8 b a
9 b c
10 c a
11 c c
关于如何做到这一点,有什么想法吗?
我们可以在原始数据上使用separate_rows
library(tidyr)
library(dplyr)
df %>%
separate_rows(col_a) %>%
separate_rows(col_b)
-输出
# A tibble: 11 × 2
col_a col_b
<chr> <chr>
1 a c
2 b b
3 c a
4 a a
5 a a
6 b a
7 b a
8 b a
9 b c
10 c a
11 c c