感谢这个网站,我正在使用R purrr
包来聚合基于多列的数据 . 聚合是我想要的,但输出不是 . 以下是使用 mtcars
数据集的示例 .
library(dplyr)
library(purrr)
#pull in data
data <- mtcars
#get colnames
variable1 <- colnames(data)
#map the variables
t1 <- map(variable1, ~ data %>%
group_by_at(.x) %>%
summarize(number = mean(mpg))) %>%
set_names(variable1) %>%
bind_rows(., .id = 'variable')
如果我期望三列(预测变量,每个变量中的级别,聚合),我有8.见下图:
如何在顶部获取代码并生成整洁的数据集?
2 回答
一种简单的方法是将数据重新整形为长格式,这样您就可以使用普通的dplyr进行聚合:
请注意,虽然
mtcars
完全是数字,但如果您有不同的类型,转换为长格式将强制变量类型 . 计算结果相同,但可能会导致问题 . 要解决此问题,请使用可处理不同类型的输出格式,例如虽然这显然不是那么漂亮,但它能够整齐地保持多种类型 . 要提取上面的结果,只需添加
%>% unnest(mpg_means)
. 按原样,分组变量分别保存在group_values
的列表元素中,并在每个mpg_means
tibble的第一列中以聚合形式保存 .在
map
中对数据进行分组时,可以将分组变量重命名为"level"
,因为这些值将形成包含最终数据集中分组变量级别的列 .当您有混合类型的分组变量(例如数字和字符)时,您还需要将分组变量强制转换为字符,以便能够将结果绑定在一起 .
有了这些补充,你应该得到你期望的 . (您也可以使用
map_df
而不是map
来跳过bind_rows
,以保存一些代码,就像我在下面所做的那样 . )您还可以将该过程包装在一个函数中,并允许多个变量汇总多个函数 . 你不得不花一点时间想出一个令人回味的名字(我被骗了,只是在这里使用
foo
) .