r - R中的Purrr Prop.table
问题描述
我用它来获取所有列的频率表。但是,我想将相同的东西转换为频率百分比表,然后转换为数据框
mtcars %>% map(table) %>% do.call(rbind,.)
我的尝试
mtcars %>% map(prop.table(table))
它给出了一个错误,请帮助
sum(x) 中的错误:参数的“类型”(闭包)无效
已编辑
这是我运行您发送的代码后得到的输出,它运行完美 https://m.imgur.com/gallery/lFcKTVo
我只是怀疑我的数据集中几乎没有分类列,例如可以在图像 URL 中看到的性别。我可以构建一个函数,在其中提到我的分类变量并获得与每个类别和总数相同的东西(如果可能)
我试着做这样的事情
temp <- split(df1, df1$gender)
temp %>%
imap(~ .x %>%
table() %>%
prop.table() %>%
as_tibble() %>%
set_names("value", .y)) %>%
reduce(full_join) %>%
arrange(as.numeric(value)) %>%
base::t() %>%
as_tibble(rownames = "-") %>%
set_names(unlist(.[1,])) %>%
slice(-1)
我得到以下错误表中的错误(。):尝试使用> = 2 ^ 31个元素制作表
正在处理的数据框的 Dput
structure(list(company = c("Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority", "Sports Authority", "Sports Authority",
"Sports Authority", "Sports Authority"), variety_products = c(6,
6, 7, 7, 3, 3, 5, 8, 8, 8, 7, 9, 5, 8, 8, 1, 9, 6, 8, 5, 9, 10,
4, 3, 7, 8, 9, 7, 7, 6, 9, 7, 8, 8, 6, 6, 4, 9, 9, 8, 9, 5, 8,
4, 7, 8, 4, 7, 8, 4, 8, 6), quality_products = c(10, 8, 9, 10,
6, 4, 8, 8, 10, 8, 7, 8, 6, 10, 9, 10, 10, 8, 9, 10, 10, 10,
7, 6, 8, 8, 10, 10, 7, 3, 9, 6, 8, 8, 3, 10, 8, 10, 10, 8, 9,
7, 9, 7, 8, 8, 6, 7, 10, 8, 9, 9), brand_products = c(10, 7,
8, 10, 7, 5, 7, 7, 10, 8, 6, 7, 6, 8, 8, 10, 8, 7, 9, 10, 7,
10, 7, 7, 8, 8, 10, 10, 7, 6, 9, 8, 9, 9, 6, 8, 9, 10, 7.96078431372549,
6, 10, 6, 9, 10, 8, 7, 5, 6, 8, 7, 10, 8), overall_product_satisfaction = c(9,
7, 9, 10, 5, 3, 8, 8, 10, 8, 7, 8, 6, 10, 9, 10, 9, 8, 9, 10,
8, 10, 7, 6, 7, 8, 8, 10, 8, 3, 9, 8, 8, 8, 8, 8, 7, 10, 8, 7,
9, 7, 9, 7, 7, 8, 7, 8, 8, 7, 9, 8), organized_satisfaction = c(9,
9, 9, 10, 4, 4, 7, 7, 9, 7, 6, 8, 6, 9, 10, 10, 8, 8, 8, 7, 9,
10, 7, 7, 9, 8, 10, 9, 8, 9, 9, 8, 7, 9, 6, 8, 7, 10, 10, 8,
9, 7, 8, 8, 8, 9, 8, 6, 9, 8, 10, 7), cleanliness_satisfaction = c(10,
8, 10, 10, 3, 10, 8, 8, 10, 8, 6, 9, 6, 10, 10, 10, 10, 8, 10,
10, 9, 10, 8, 9, 8, 8, 10, 10, 7, 10, 10, 10, 10, 9, 10, 9, 10,
10, 9, 10, 10, 6, 8, 8, 8, 7, 8, 7, 8, 10, 10, 10), staff_satisfaction = c(9,
8, 8, 10, 1, 5, 6, 6, 10, 8, 7, 7, 4, 8, 10, 10, 9, 7, 10, 10,
7, 10, 8, 7, 7, 8, 10, 10, 7, 9, 10, 7, 8, 9, 3, 7, 10, 10, 6,
9, 10, 5, 8, 7, 8, 8, 6, 8, 9, 7, 10, 7), overall_experience = c(9,
7, 9, 10, 3, 5, 7, 7, 10, 8, 7, 8, 4, 9, 9, 10, 9, 8, 9, 10,
9, 10, 8, 8, 8, 8, 9, 10, 8, 6, 9, 9, 8, 9, 7, 7, 9, 10, 8, 7,
9, 5, 8, 8, 7, 9, 7, 7, 8, 8, 10, 8), overall_quality = c(8,
7, 9, 10, 5, 4, 8, 7, 10, 8, 7, 8, 4, 9, 9, 10, 10, 8, 9, 10,
8, 10, 8, 7, 7, 8, 9, 10, 7, 4, 9, 9, 8, 8, 8, 8, 8, 10, 9, 8,
10, 7, 9, 9, 7, 8, 7, 8, 8, 8, 9, 8), price_products = c(8, 7,
8, 10, 2, 6, 7, 6, 9, 7, 7, 6, 6, 10, 7, 10, 6, 8, 9, 10, 7,
10, 6, 4, 8, 7, 10, 9, 7, 6, 9, 8, 7, 7, 5, 9, 9, 8, 10, 7, 8,
8, 8, 6, 7, 9, 7, 7, 9, 8, 10, 6), deals_savings = c(8, 8, 9,
10, 5, 6, 9, 8, 10, 7, 6, 8, 6, 10, 9, 10, 9, 8, 10, 10, 6, 10,
7, 6, 8, 7, 9, 10, 7, 6, 10, 8, 9, 8, 3, 9, 10, 10, 8, 8, 8,
8, 8, 8, 8, 8, 6, 6, 8, 9, 10, 7), time_find_products = c(6,
8, 9, 5, 2, 7.85106382978723, 9, 6, 10, 8, 6, 8, 6, 10, 7.85106382978723,
10, 8, 7, 10, 10, 9, 10, 6, 6, 8, 8, 9, 10, 7, 6, 7.85106382978723,
9, 8, 8, 9, 7.85106382978723, 7, 9, 9, 8, 10, 7, 8, 7, 7, 7,
7, 7.85106382978723, 9, 7, 10, 6), overall_costs = c(8, 7, 9,
10, 4, 5, 8, 7, 9, 7, 7, 8, 6, 10, 9, 10, 8, 8, 9, 10, 7, 10,
7, 5, 7, 8, 9, 10, 7, 6, 9, 8, 8, 8, 8, 7, 8, 9, 8, 7, 9, 8,
8, 7, 8, 8, 6, 7, 8, 8, 10, 7), wwpf = c(8, 7, 9, 9, 4, 4, 8,
7, 9, 8, 6, 8, 6, 9, 8, 10, 8, 7, 9, 9, 7, 10, 8, 6, 7, 8, 8,
10, 7, 4, 9, 9, 8, 8, 9, 8, 9, 9, 9, 7, 9, 8, 8, 8, 7, 8, 7,
8, 9, 9, 10, 7), likelihood_return_3_months = c(8, 8, 10, 10,
2, 2, 8, 7, 9, 8, 7, 9, 5, 10, 9, 10, 10, 9, 10, 10, 10, 10,
8, 6, 8, 8, 8, 10, 8, 1, 9, 8, 9, 7, 8, 7, 8, 10, 8, 7, 10, 7,
8, 8, 7, 8, 6, 6, 10, 9, 10, 9), nps = c(5, 7, 9, 10, 2, 2, 8,
7, 9, 9, 6, 9, 4, 10, 9, 10, 10, 6, 9, 10, 9, 10, 7, 7, 8, 8,
9, 10, 8, 0, 9, 6, 9, 8, 4, 8, 5, 10, 9, 8, 10, 6, 8, 8, 7, 8,
6, 6, 10, 8, 10, 8), gender = c("m", "f", "m", "f", "m", "m",
"m", "f", "f", "m", "f", "m", "f", "m", "m", "m", "f", "f", "m",
"f", "m", "f", "m", "m", "m", "f", "f", "m", "m", "m", "f", "f",
"m", "m", "f", "f", "f", "f", "f", "m", "m", "f", "f", "m", "m",
"f", "m", "f", "f", "f", "m", "f"), education = c("hs", "college",
"above_college", "hs", "hs", "above_college", "above_college",
"above_college", "college", "college", "college", "above_college",
"hs", "hs", "hs", "college", "above_college", "hs", "hs", "above_college",
"above_college", "above_college", "college", "college", "college",
"above_college", "hs", "college", "college", "above_college",
"hs", "hs", "above_college", "above_college", "hs", "above_college",
"above_college", "above_college", "college", "college", "college",
"above_college", "hs", "college", "college", "above_college",
"hs", "hs", "above_college", "above_college", "hs", "hs")), row.names = c(NA,
-52L), class = c("tbl_df", "tbl", "data.frame"))
解决方案
我不太确定你想要什么,但也许这段代码会返回它。
mtcars %>%
imap(~ {
prop_table <- .x %>%
table() %>%
prop.table()
temp <- cbind(matrix(c(.y, "prop", "--"), ncol = 1),
rbind(names(prop_table), c(prop_table), "--"))
colnames(temp) <- NULL
as_tibble(temp)
}) %>%
do.call("bind_rows", .)
[编辑]
好吧,这是怎么回事?
mtcars %>%
imap(~ .x %>%
table() %>%
prop.table() %>%
as_tibble() %>%
set_names("value", .y)) %>%
reduce(full_join) %>%
arrange(as.numeric(value)) %>%
t() %>%
as_tibble(rownames = "-") %>%
set_names(unlist(.[1,])) %>%
slice(-1)
[编辑 2]
你temp
不是data.frame
但是list
。你需要使用map(~ map(.x, ~))
.
temp <- split(df1, df1$gender)
temp %>%
map_dfr(~
imap(.x, ~ .x %>%
table() %>%
prop.table() %>%
as_tibble() %>%
set_names("value", .y)) %>%
reduce(full_join) %>%
arrange(as.numeric(value)) %>%
base::t() %>%
as_tibble(rownames = "-") %>%
set_names(unlist(.[1,])) %>%
slice(-1)
)
推荐阅读
- node.js - 在 Mac OS 上使用带有电子的 sqlite3 的问题
- python - 我正在尝试使用 Python 正则表达式解析一些日志文件,但出现以下错误:行继续符后出现意外字符
- sql - 选择累积和小于数字的位置(按优先级顺序)
- java - NetSuite 的 OAuth 1.0 身份验证
- c - Pypy CFFI 内存管理问题
- c# - AWS .NET SDK SimpleEmail SendEmail 返回“无法加载类型”错误
- ms-access - MS Access 2013 导出查询到 XML 不保存文件
- c# - 将 XML 层次结构展平为 CSV 的最佳方法是什么?
- arrays - 将 Firebase 中的数据读入数组
- bixby - 关于bixby中缩略图卡上的点击方法