首页 > 解决方案 > 如何在 dplyr 中调用第 n 个下一个值?

问题描述

很抱歉,我无法准确解释。所以,我会用简单的例子来问。当我在看这个问题时,我使用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上面的循环中,我该如何调用YesorNo[i-1]dplyr

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

标签: rdplyr

解决方案


lag您可以leaddplyr.

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')]

推荐阅读