【发布时间】:2019-01-17 11:24:58
【问题描述】:
我正在尝试计算包含由“;”分隔的单个观察的小标题列表中的出现频率。当我在purrr::map() 中使用purrr::map() 时遇到错误。我怀疑我遗漏了一些简单的东西,因此不胜感激。
以不同客户购买水果为例,同时购买的水果用“;”隔开
# Fruit purchases across days with different number of customers.
day_1 <- as_data_frame(setNames(list(c("oranges;peaches;apples", "pears;apples", "bananas", "oranges;apples", "apples")), "fruits"))
day_2 <- as_data_frame(setNames(list(c("oranges;apples", "peaches","apples;bananas;", "pears", "apples;peaches", "oranges")), "fruits"))
day_3 <- as_data_frame(setNames(list(c("peaches;pears","apples","bananas")), "fruits"))
# Create list of fruit purchases.
fruit_list <- list(day_1, day_2, day_3)
这会返回一个包含三个 tibbles 的列表,并且是我的数据的一般格式。我可以使用dplyr/purrr 计算每天每种水果的总观察次数:
fruit_list %>%
map(function(x) strsplit(x$fruits, ";")) %>%
map(unlist) %>%
map(table)
但是,当我尝试使用 map() 中的 map() 来隔离和统计整个 tibbles 列表中的单个水果购买时,我遇到了错误
“错误:
.x不是向量(闭包)”
fruit_list %>%
map(mutate(fruit_count = map(function(x) strsplit(x$fruits, ";"), length))) %>%
filter(fruit_count==1) %>%
count(solo_fruits = fruits)
我可以在单个 tibble/df 上执行此功能,但不能跨 tibble 列表执行此功能。我是否缺少 map() 函数或更明显的东西?谢谢!
第一个小标题所需的结果格式:
# A tibble: 2 x 2
solo_fruits n
<chr> <int>
1 apples 1
2 bananas 1
我如何为单个样本得出上述答案:
day_1_df <- as.data.frame(fruit_list[[1]])
day_1_df %>%
mutate(fruit_count = map(strsplit(day_1_df$fruits, ";"), length)) %>%
filter(fruit_count==1) %>%
count(solo_fruits = fruits)
【问题讨论】:
-
如果你有一个更大的小标题而不是小标题列表可能会更好。你有什么理由做后者?
-
好点,没有理由不拥有更大的小标题。您在下面的建议为解决我的问题提供了正确的框架。非常感谢!