我有一点点地方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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句