在R中,在下面的行中查找值
我试图在正在计算的值下面的一行中查找一个值。例如,如果我有dfx,我想创建另一个名为samp3的变量,它每次在samp2中出现B时返回值1,但我希望它返回B上方的一行在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
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