我有一个看起来像这样的数据集:
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。
期望的结果将如下所示:
谢谢。
答案 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创建