r遍历列和行

时间:2016-03-13 19:57:36

标签: r loops if-statement lapply

我试图在数据帧的所有行中循环遍历列[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))

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