如果满足条件,请在上面的6行中选择R中的值 [英] If condition is met, go 6 rows above and select the value in R

查看:56
本文介绍了如果满足条件,请在上面的6行中选择R中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在R中执行以下操作:在我的数据集(附加的md2)中,如果L_ID = 1,则在上面排6行,并使用变量Hway创建一个新的数据框.我使用以下命令:

I am trying to do in R the following: In my dataset (md2, attached), if L_ID=1, go 6 rows above and create a new dataframe with the variable Hway. I use the following command:

spc <- data.frame(md$Hdwy[c(md2$L_ID[-6], 0) == 1])

期待看到:

> spc
44.46 40.00

这似乎可行,但是当我检查时,我注意到它选择的值是上面的1行而不是6行:

It seems to work, however when I checked I noticed that it selects the value 1 row above instead of 6:

> spc
    40.1 40.00

有什么想法吗?

推荐答案

这样的事情怎么样?

library(dplyr)
spc <- md2 %>%
         mutate(Lag = lag(Hdwy, 6L)) %>%
         filter(L_ID==1) %>%
         pull(Lag)
spc
[1] 44.46 40.00

或使用基数R:

spc <- md2$Hdwy[which(md2$L_ID == 1) - 6]
spc
[1] 44.46 40.00

样本数据:

md2 <- structure(list(Hdwy = c(45.01, 45.03, 449, 44.46, 43.63, 425, 
41.36, 40.53, 40.1, 39.97, 39.98, 40, 40, 40, 40, 41.36, 40.53, 
40.1, 40, 40), L_ID = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1)), class = "data.frame", row.names = c(NA, 
-20L))

这篇关于如果满足条件,请在上面的6行中选择R中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆