有条件地在R中的列中向下移动一个单元格

时间:2016-12-29 00:35:06

标签: r

我会重现

v1 <- c(40,45,46,45,46,43,45)
v2 <- c(41,19,44,45,23,44,42)
df <- data.frame(v1,v2)

v1 v2
40 41 
45 19
46 44
45 45
46 23
43 44
45 42

我想要的结果是

if v1 - v2 > 10

然后我应该按顺序排列单元格。

v1 v2
40 41
45 NA
46 19
45 44
46 45
43 NA
45 23
NA 44
NA 42

太复杂了吗?

1 个答案:

答案 0 :(得分:0)

我相信会有更好的方法,但这对初学者来说是好的:)

v1 <- c(40,45,46,45,46,43,45)
v2 <- c(41,19,44,45,23,44,42)
df <- data.frame(v1,v2)

update_df <- function(df){
  v1 <- df$v1
  v2 <- df$v2
  v1 <- c(v1,NA)
  v2 <- c(v2[1:i-1],NA,v2[i:length(v2)])
  return(cbind.data.frame(v1,v2))
}

k <- nrow(df)
skip <- FALSE

for(i in 1:k)
{
  if(df$v1[i] - df$v2[i] > 10 & skip == F)
    { df <- update_df(df)
      k <- nrow(df)
      skip <- TRUE
      next}
  skip <- FALSE
}