【发布时间】:2018-05-04 16:12:29
【问题描述】:
plyr 包具有多种 _ply 函数,其中前两个字母指的是输入和输出,因此 ddply 接受数据帧输入并产生数据帧输出,dlply 接受数据帧输入并产生一个列表输出。由于多种原因,我通常更喜欢使用dplyr 包,而plyr 和dplyr 在单个环境中不能很好地协同工作。有没有办法在dplyr 的管道语法中从plyr 复制dlply 函数的“数据框输入,列出”功能?
我想复制的功能的一个简单示例:
data = data.frame(x = rep(seq(from = 1, to = 100, by = 1), times = 3),
y = rnorm(n = 300),
group_var = c(rep("A", 100), rep("B", 100), rep("C", 100)))
spline.fun = function(x, xvar, yvar, ...) {
smooth.spline(x = x[,xvar], y = x[,yvar], ...)
}
spline_list = dlply(data, "group_var", spline.fun, xvar = "x", yvar = "y")
我想写的代码是这样的:
spline_list = data %>%
group_by(group_var) %>%
list_mutate(list_element = spline.fun, xvar = x, yvar = y)
但据我所知,没有dplyr 函数可以像 mutate 创建新列那样创建列表元素
【问题讨论】:
-
请看我的帖子和我的更新。如果您正在寻找数据框,请列出,然后拆分数据框并使用
map或lapply应用函数对我来说很有意义。