【问题标题】:Error when using "diff" function inside of dplyr mutate在 dplyr mutate 中使用“diff”函数时出错
【发布时间】:2016-02-03 05:48:34
【问题描述】:

我尝试将 mutate 新列添加到 data.frame。当V 列顺序从降序变为升序时,我使用mutate 内部的diff 函数将它们分类到新列H 中。

V <- c(seq(30,-10,-10),seq(-10,30,10))
gr = rep(seq(1,3),each=10)
df <- data.frame(V,gr)

library(dplyr)    
diff_df <- df%>%
  group_by(gr)%>%
  mutate(H=ifelse(diff(V)<0,"back","forward"))

但是出现错误

Error: incompatible size (9), expecting 10 (the group size) or 1

但是当我这样做时

差异(df$V)

[1] -10 -10 -10 -10 0 10 10 10 10 0 -10 -10 -10 -10 0 10 10 10 10 0 -10 -10 -10 -10 0 10 10 10 10

似乎合乎逻辑。为什么我在 dplyr? 内部执行操作时会出错

【问题讨论】:

    标签: r dplyr difference


    【解决方案1】:

    我们需要再连接一个值以使长度等于diff 返回的长度比组的长度小一。即

    length(df$V)
    #[1] 30
    length(diff(df$V))
    #[1] 29
    

    因此,我们在开头连接一个虚拟数字以使length 相等。

     df %>%
       group_by(gr) %>%
       mutate(H=ifelse(c(0,diff(V))<0,"back","forward"))
    

    如果我们需要第一个值是'back',将条件更改为&lt;=0

    【讨论】:

    • &lt;=0 我是来问这个的:))谢谢伙计。顺便说一句,仍在努力解决这个问题:( [stackoverflow.com/questions/35143269/…
    • @Alexander 我试过了,但无法正确。大多数base R 方法不适用于那个。
    • 所以你的意思是我也应该放弃?
    • 更多的dplyr-y 替代方案是将diff 替换为V - lag(V)。 (或者可能是V - lag(V, 1, 0)
    • @jhilliar mutate_each 很快就会被替换。 df %&gt;% group_by(gr) %&gt;% mutate_all(funs(ifelse(c(0, diff(.)) &lt; 0, "back", "forward")))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多