我正在尝试在管道结构中联合使用tidyr::spread
和dplyr::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} x
,y
,z
,w
列的组合创建列表,并适用每个元素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()
命令中运行,则它不起作用,但如果它应用于列表的特定元素,则会起作用。
我知道我应该发布一个最小的工作示例,但我正在处理的数据帧非常大并且难以模拟。应该可以(如何?)并根据要求,如果您觉得可能会有帮助,我很乐意上传给您看看。
问候并感谢。