r - 如何在 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]
?
解决方案
lag
您可以lead
在dplyr
.
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>
请注意,lag
和lead
函数的默认第一个和最后一个值NA
分别是。
在data.table
等效函数中是shift
-
library(data.table)
setDT(df)
df[, previous_value := shift(stim, type = 'lag')]
df[, next_value := shift(stim, type = 'lead')]
推荐阅读
- java - Youtube 数据 API-HTTP/1.1 401 未经授权
- javascript - ReactJS 中的按钮显示不正确
- c++ - size_t 和 unsigned long long 有什么区别吗?
- regex - 查找和替换小写到大写不起作用
- python - 在 python 中绘图时图形重叠
- swift - 如何以编程方式将个人资料图像快速存储到firebase
- varnish - 如果选项设置 beresp.do_gzip = true,则 varnishstat 中没有后端计数器 beresp_bodybytes;
- php - Symfony 5 - 获取角色层次结构以影响用户
- vue.js - 同步函数调用期间的Vue更新组件
- gremlin - 将 Ip 字符串转换为整数以检查它是否属于 CIDR 块