Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,在下面的行中查找值_R - Fatal编程技术网

在R中,在下面的行中查找值

在R中,在下面的行中查找值,r,R,我试图在正在计算的值下面的一行中查找一个值。例如,如果我有dfx,我想创建另一个名为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) x这是一个data.tabl

我试图在正在计算的值下面的一行中查找一个值。例如,如果我有dfx,我想创建另一个名为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)

x这是一个data.table解决方案:

library(data.table)

setDT(x)

x[, samp3 := ifelse(shift(samp2, -1) == "B", 1, NA)]

一种方法是使用
dplyr::lead


x我不断收到一个错误,该错误表示shift不能接受负“shift中的错误(事件,-1):n必须是非负整数值(>=0)”,我有
数据。表
1.12.4。您有哪个版本?可能是您正在使用另一个屏蔽
shift
的软件包。在我提供的代码中,将
shift
替换为
data.table::shift
。它应该可以使用
lead
修改我的答案。谢谢,谢谢!我喜欢这种方式,对我来说非常直观!欢迎来到堆栈溢出!请在你的回答中再补充一些细节好吗?如果你解释一下它是如何工作的,以及它是如何回答这个问题的,那会有帮助吗?
library(data.table)

setDT(x)

x[, samp3 := ifelse(shift(samp2, -1) == "B", 1, NA)]
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