【问题标题】:How to interpret column length error from ddplyr::mutate?如何解释来自 ddplyr::mutate 的列长度错误?
【发布时间】:2018-10-08 20:35:13
【问题描述】:

我正在尝试跨两个向量应用一个函数(比下面使用的函数更复杂,但我试图简化)。但是,我收到以下错误:

    mutate_impl(.data, dots) : 
       Column `diff` must be length 2 (the group size) or one, not 777

我认为我可能会收到此错误,因为根据我阅读的一些帖子,行之间的差异导致比原始数据框少一行。但是,当我遵循该建议并尝试添加一个向量以在最后一行添加 0/NA 时,我收到了另一个错误。我是否至少正确识别了错误的来源?想法?谢谢。

原码:

     diff_df <- DF %>%
       group_by(DF$var1, DF$var2) %>%
       mutate(diff = map2(DF$duration, lead(DF$duration), `-`)) %>%
       as.data.frame()

【问题讨论】:

  • group_by 内部,您不只是DF$ 用户group_by(var1, var2),同样在mutate 内部也是如此。 DF %&gt;% group_by(var1, var2) %&gt;% mutate(diff = duration - lead(duration))
  • 嗯,我这样做是为了使代码更具可读性 - 但删除它可以消除错误!为什么简单地删除 df 名称就可以解决问题?
  • 提取整列并打破分组条件

标签: r dataframe dplyr


【解决方案1】:

我们不需要map2 来获得“持续时间”和“持续时间”的lead 之间的差异。它是矢量化的。 map2 将循环遍历 'duration' 的每个元素以及 lead(duration) 的相应元素,这是不必要的

DF %>% 
    group_by(var1, var2) %>% 
    mutate(diff = duration - lead(duration))

注意:当我们在group_by 之后提取带有DF$duration 的列时。它打破了分组条件并获得了完整的数据集列。此外,在管道中,不需要dataset$columnname。应该是columnname(但是,在某些情况下,当我们想要获取完整列进行比较时-可以使用)

【讨论】:

  • 太棒了 - 不敢相信我没有看到这一点,但非常有意义。很好的例子,说明为什么让另一双眼睛关注你的代码总是好的。感谢您发现如此愚蠢的错误! (我要等10分钟才能接受你的回答,然后我会的。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2021-10-04
  • 2020-06-20
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多