使用 forcats 和 purrr 总结字符向量列表
summarizing a list of character vectors using forcats and purrr
我有 tibble,其中 col1
是可变长度的字符向量列表,col2
是表示组分配的数字向量,1 或 0。我想首先转换所有列表中的字符向量 (col1
) 到因子,然后统一这些因子中的所有因子水平,以便我最终可以得到每个因子水平的计数。对于下面的示例数据,这意味着计数如下:
总体:
level, count
"a", 2
"b", 2
"c", 2
"d", 3
"e", 1
组=1:
level, count
"a", 1
"b", 2
"c", 1
"d", 1
"e", 0
组=0:
level, count
"a", 1
"b", 0
"c", 1
"d", 2
"e", 1
最终目标是能够获得每个因子水平的总计数 c("a","b","c","d","e")
并通过分组变量绘制它们。
这里有一些代码可能会更好地解释我的问题:
library(forcats)
library(purrr)
library(dplyr)
library(ggplot2)
tib <- tibble(col1=list(c("a","b"),
c("b","c","d"),
c("a","d","e"),
c("c","d")),
col2=c(1,1,0,0))
tib %>%
mutate(col3=map(.$col1,.f = as_factor)) %>%
mutate(col4=map(.$col3,.f = fct_unify))
不幸的是,这段代码失败了。我收到以下错误,但不知道为什么:
Error:
fsmust be a list
我以为我输入的是一个列表?
感谢任何人提供的帮助。谢谢。
您可以先unnest
然后count
library(dplyr)
library(tidyr)
tib %>%
unnest(col = col1) %>%
#If needed col1 as factors
#mutate(col1 =factor(col1)) %>%
count(col1)
# col1 n
# <fct> <int>
#1 a 2
#2 b 2
#3 c 2
#4 d 3
#5 e 1
到 count
基于组即 col2
,我们可以做
tib %>%
unnest(col = col1) %>%
mutate_at(vars(col1, col2), factor) %>%
count(col1, col2, .drop = FALSE)
# col1 col2 n
# <fct> <fct> <int>
# 1 a 0 1
# 2 a 1 1
# 3 b 0 0
# 4 b 1 2
# 5 c 0 1
# 6 c 1 1
# 7 d 0 2
# 8 d 1 1
# 9 e 0 1
#10 e 1 0
我有 tibble,其中 col1
是可变长度的字符向量列表,col2
是表示组分配的数字向量,1 或 0。我想首先转换所有列表中的字符向量 (col1
) 到因子,然后统一这些因子中的所有因子水平,以便我最终可以得到每个因子水平的计数。对于下面的示例数据,这意味着计数如下:
总体:
level, count
"a", 2
"b", 2
"c", 2
"d", 3
"e", 1
组=1:
level, count
"a", 1
"b", 2
"c", 1
"d", 1
"e", 0
组=0:
level, count
"a", 1
"b", 0
"c", 1
"d", 2
"e", 1
最终目标是能够获得每个因子水平的总计数 c("a","b","c","d","e")
并通过分组变量绘制它们。
这里有一些代码可能会更好地解释我的问题:
library(forcats)
library(purrr)
library(dplyr)
library(ggplot2)
tib <- tibble(col1=list(c("a","b"),
c("b","c","d"),
c("a","d","e"),
c("c","d")),
col2=c(1,1,0,0))
tib %>%
mutate(col3=map(.$col1,.f = as_factor)) %>%
mutate(col4=map(.$col3,.f = fct_unify))
不幸的是,这段代码失败了。我收到以下错误,但不知道为什么:
Error:
fsmust be a list
我以为我输入的是一个列表?
感谢任何人提供的帮助。谢谢。
您可以先unnest
然后count
library(dplyr)
library(tidyr)
tib %>%
unnest(col = col1) %>%
#If needed col1 as factors
#mutate(col1 =factor(col1)) %>%
count(col1)
# col1 n
# <fct> <int>
#1 a 2
#2 b 2
#3 c 2
#4 d 3
#5 e 1
到 count
基于组即 col2
,我们可以做
tib %>%
unnest(col = col1) %>%
mutate_at(vars(col1, col2), factor) %>%
count(col1, col2, .drop = FALSE)
# col1 col2 n
# <fct> <fct> <int>
# 1 a 0 1
# 2 a 1 1
# 3 b 0 0
# 4 b 1 2
# 5 c 0 1
# 6 c 1 1
# 7 d 0 2
# 8 d 1 1
# 9 e 0 1
#10 e 1 0