让我说我有这样的意见:
input=data.frame(x=c(2,3,4,5,6,7), y=c(5,5,4,4,3,5))
x y
1 2 5
2 3 5
3 4 4
4 5 4
5 6 3
6 7 5
现在我想替换x的值,如果y< 5.在这种情况下,我想取y =>的最后一个x值。 5
这样的事情:
attach(input)
xnew=ifelse(y < 5, "last x value for which y=> 5", x)
对于该示例,输出应如下所示:
xnew y
1 2 5
2 3 5
3 3 4
4 3 4
5 3 3
6 7 5
我需要更换"last x value for which y=> 5"
才能使其正常工作?
提前致谢!
答案 0 :(得分:3)
indx <- input$y[tail(which(input$y <5),1)]
input$x[input$y <5] <- indx
input
# x y
#1 2 5
#2 3 5
#3 3 4
#4 3 4
#5 3 3
#6 7 5
或使用data.table
library(data.table)
setDT(input)[y <5, x:= y[max(which(y <5))]]
使用新数据集:
input=data.frame(x=c(2,3,4,5,6,7,8,9,10,11,12), y=c(5,5,4,4,3,5,3,5,3,3,5))
indx <- which(c(0,diff(input$y<5))==1)
indx1 <- cumsum(which(input$y <5) %in% indx)
input$x[which(input$y <5)]<- input$x[indx-1][indx1]
input
# x y
#1 2 5
#2 3 5
#3 3 4
#4 3 4
#5 3 3
#6 7 5
#7 7 3
#8 9 5
#9 9 3
#10 9 3
#11 12 5
答案 1 :(得分:3)
我会从na.locf
包中尝试zoo
。使用评论中的input
input=data.frame(x=c(2,3,4,5,6,7,8,9,10,11,12), y=c(5,5,4,4,3,5,3,5,3,3,5))
input[input$y < 5, "x"] <- NA
library(zoo)
input$x <- na.locf(input$x)
input
# x y
# 1 2 5
# 2 3 5
# 3 3 4
# 4 3 4
# 5 3 3
# 6 7 5
# 7 7 3
# 8 9 5
# 9 9 3
# 10 9 3
# 11 12 5