【问题标题】:How to call nth next value in dplyr?如何在 dplyr 中调用第 n 个下一个值?
【发布时间】:2021-09-02 06:42:16
【问题描述】:

很抱歉,我无法准确解释。所以,我会用简单的例子来问。 在查看This question 时,我使用for 循环将yes 值替换为N/A

stim <- c("a", "k", "y", "j", "t", "Stop", "f", "l", "b", "a", "c", "Stop")
df <- data.frame(stim)

df<- df%>%
  mutate(YesorNo = ifelse(stim == "Stop", "N/A", "yes"))
for (i in 1:dim(df)[1]){
  if (df$YesorNo[i] == "N/A") {
    if(i == 1){
    } else {
      df$YesorNo[i-1] = "no"
    }
  }
}

在上面的for 循环中,我如何在dplyr 中调用YesorNo[i-1]

同理,固定号码n,如何拨打YesorNo[i-n]

【问题讨论】:

  • lag(YesorNo, n) 为您提供第 n 个上一个值,而 lead 将为您提供下一个值。
  • 你要找的函数是lag()
  • @RonakShah @Sotos 非常感谢!从lag() 我发现lead() 倒退了。

标签: r dplyr


【解决方案1】:

您可以在dplyr 中使用laglead 函数。

library(dplyr)

df %>%
  mutate(previous_value = lag(stim), 
         next_value = lead(stim))

#   stim previous_value next_value
#1     a           <NA>          k
#2     k              a          y
#3     y              k          j
#4     j              y          t
#5     t              j       Stop
#6  Stop              t          f
#7     f           Stop          l
#8     l              f          b
#9     b              l          a
#10    a              b          c
#11    c              a       Stop
#12 Stop              c       <NA>

注意laglead 函数的默认第一个和最后一个值分别是NA

data.table 中,等效函数是shift -

library(data.table)

setDT(df)
df[, previous_value := shift(stim, type = 'lag')]
df[, next_value := shift(stim, type = 'lead')]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 2018-02-18
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多