如果R中满足条件,则替换值和以前的值

时间:2020-05-22 17:17:41

标签: r loops

我有一个看起来像这样的数据集:

df <- matrix(c(0.2, 0.5, 1, 3.1, 0.5, 0.3, 0.1, 4, 0.3, 1.2), nrow=5, ncol=2)

(这是一个简化的示例)

我想编写一个函数或循环,以检查每个值(t)或其先前值(t-1)是否大于3,并替换 b 和t-1如果其中一个大于3,则为NA。

期望的结果将如下所示:

谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个基本的R解决方案,应该可以产生您想要的结果。注意,由于所需的输出中没有“环绕”,因此我将矩阵转换为data.frame

# your data
df <-matrix(c(0.2, 0.5, 1, 3.1, 0.5, 0.3, 0.1, 4, 0.3, 1.2), nrow=5, ncol=2)

# needs to be converted to a data.frame 
df <- as.data.frame(df)

# recode function
recode_df <- function(x) { 
  x2 <- c(NA,x[-length(x)])
  x3 <- c(x[-1], NA)
  replace(x, (x > 3 | x2 > 3 | x3 > 3), NA)
}

# apply recode function on all columns
as.data.frame(lapply(df, recode_df))
#>    V1  V2
#> 1 0.2 0.3
#> 2 0.5  NA
#> 3  NA  NA
#> 4  NA  NA
#> 5  NA 1.2

reprex package(v0.3.0)于2020-05-23创建

相关问题