我试图在数据帧的所有行中循环遍历列[x],使用一些ifelse条件并更新它们的值。期望的结果是具有x值和更新条件的新数据帧。 这是一个例子:
M <- data.frame(x1=c(1,1,1,1), x2=c(1,1.05,1.1,1.15), x3=c(1.15,1,1.14,1),
y=c(1, 0.90, 0.98, 0.95), z=c(1,1.11,1.02,1.05))
myfun1 <- function(x, y, z) {
x <- ifelse(x > z, x*y, 1)
y <- ifelse(x > z, 1, x*y)
z <- ifelse(x > z, 1, 1/(x*y))
}
M1 <- as.data.frame(lapply(M, function(x) myfun1(x[1:3], x[4], x[5])))
我也试图对这个函数进行矢量化,但是它没有用。有什么帮助吗?
编辑,这是预期的结果
M1 <- data.frame(x1=c(1,1,1,1), x2=c(1,1,1.078,1.093), x3=c(1.15,1,1.14,1),
y=c(1, 0.945, 1, 1), z=c(1,1.06,1,1))
答案 0 :(得分:0)
我们可以使用for
循环
for(i in 1:3){
M[,i] <- ifelse(M[,i] > M$z, M[,i]*M$y, 1)
M$y <- ifelse(M[,i] >M$z, 1, M[,i]*M$y)
M$z <- ifelse(M[,i] > M$z, 1, 1/(M[,i]*M$y))
}
M