在lapply()下的tidyr :: spread和dplyr :: mutate_each问题

时间:2016-06-22 18:08:53

标签: r dplyr tidyr

我正在尝试在管道结构中联合使用tidyr::spreaddplyr::mutate_each,如下例所示:

df_new <- df %>%
   split(list(.$x, .$y, .$z, .$w), drop = TRUE) %>%
   lapply(function(x) {
               x %>%
                 spread(key = filename, value = value) %>%
                 mutate_each(funs(. - freefree), starts_with("NIData_"))
                       })

代码根据df&#39 {s} xyzw列的组合创建列表,并适用每个元素function(x)

filename列包含值freefree以及以NIData_开头的其他一些值。 mutate_each()的目的是从freefree开头的所有列中减去列NIData_

当我运行代码时,我收到以下错误:

  

错误:对象&#39; freefree&#39;找不到

尝试调试代码,我将其限制为以下命令:

df_new <- df %>%
       split(list(.$x, .$y, .$z, .$w), drop = TRUE) %>%
       lapply(function(x) {
                   x %>%
                     spread(key = filename, value = value)
                           })

如果我现在申请:

df_new[[1]] %>% mutate_each(funs(. - freefree), starts_with("NIData_"))

mutate_each()已正确执行。也就是说,如果spread()mutate_each()序列在lapply()命令中运行,则它不起作用,但如果它应用于列表的特定元素,则会起作用。

我知道我应该发布一个最小的工作示例,但我正在处理的数据帧非常大并且难以模拟。应该可以(如何?)并根据要求,如果您觉得可能会有帮助,我很乐意上传给您看看。

问候并感谢。

0 个答案:

没有答案