【问题标题】:Does dplyr::mutate() not recycle vectors?dplyr::mutate() 不回收向量吗?
【发布时间】:2018-06-24 14:48:50
【问题描述】:

似乎使用dplyr::mutate() 创建列不允许向量回收。为什么?

例子:

require(dplyr)
df <- data_frame(id = rep(1:5, each = 42), name = rep(letters[1:7], each = 6, times = 5))

现在:

df %>% mutate (tp = c(1:42))  #results in 

Error in mutate_impl(.data, dots) : 
  Column `tp` must be length 210 (the number of rows) or one, not 42

当然

df$tp <- c(1:42) #works

我的变异代码是错误的还是回收在mutate() 中根本不起作用? 如果有帮助,我将 dplyr 0.7.2 与 RStudio 1.0.153 (Mac) 一起使用

【问题讨论】:

  • 错误消息清楚地表明您必须指定所有值或其中一个值。不回收。
  • 很公平。非常感谢。我只是认为这可能是可能的,但我的代码是错误的。悲伤的时光。不回收。
  • 如果您需要回收,则可以使用transform 作为解决方法。比较BOD %&gt;% transform(a = 1:2)BOD %&gt;% mutate(a = 1:2)
  • 谢谢! @G.Grothendieck,变换是个好主意 :)

标签: r dplyr


【解决方案1】:

你问了两个不同的问题:

  • (标题)“dplyr::mutate() 不回收向量吗?”

A:没有(正如你所发现的那样)。 dplyr vignette 明确表示回收仅适用于长度为 1 的向量:

它们 [mutate() 中使用的向量值] 的长度必须为 1(然后它们会被回收)或具有与行数相同的长度。

  • 为什么?

答:如果不询问dplyr 开发人员,可能无法回答。我推测他们在便利性(一方面)和要求 R 的原始开发者(他们甚至允许 incomplete 回收,尽管有警告)。

【讨论】:

  • 谢谢!确实是两个问题,好接。再次感谢您对这两个问题的回答
  • 我怀疑使用数据库后端实现回收的困难也可能促成了这一决定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多