在R中寻找下一行的值

问题描述 投票:0回答:3

我正在尝试在要评估的值下方的一行中寻找一个值。因此,例如,如果我有df X,并且我想创建另一个名为samp3的变量,则每当samp2中出现B时该变量就返回1的值,但我希望它返回B之上的一行。

x <- data.frame(
  samp1=c(5,6,7,5,4,5,10,5,6,7), 
  samp2=c("A","A","B","C","B","A","A","A","A","A")
)

x$samp3 <- ifelse(x$samp2 =="B", 1, NA)

如果它在同一行上,它将起作用,但是我不确定如何更改它以在上一行中返回值1。

理想情况下,我会得到一个如下所示的df。

x <- data.frame(
  samp1=c(5,6,7,5,4,5,10,5,6,7), 
  samp2=c("A","A","B","C","B","A","A","A","A","A"),
  samp3=c(NA,1,NA,1,NA,NA,NA,NA,NA,NA)
)

任何帮助将不胜感激!

我正在尝试在要评估的值下方的一行中寻找一个值。因此,例如,如果我有df X,并且我想创建另一个名为samp3的变量,则每次B出现在...

r
3个回答
1
投票

这里是data.table解决方案:


0
投票
transform(x, samp3 = ifelse(c(as.character(samp2)[-1], NA) == "B", 1, NA))
#   samp1 samp2 samp3
#1      5     A    NA
#2      6     A     1
#3      7     B    NA
#4      5     C     1
#5      4     B    NA
#6      5     A    NA
#7     10     A    NA
#8      5     A    NA
#9      6     A    NA
#10     7     A    NA

0
投票

一种方法可以使用dplyr::lead

© www.soinside.com 2019 - 2024. All rights reserved.