我正在尝试在要评估的值下方的一行中寻找一个值。因此,例如,如果我有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出现在...
这里是data.table解决方案:
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
一种方法可以使用dplyr::lead