我有一些数据:
set.seed(565)
df <- data.frame(rs1 = rnorm(100, mean = 50, sd = 3), rs2 = rnorm(100, mean = 4, sd = 0.2), rs3 = rnorm(100, mean = 15, sd = 1),
rs4 = rnorm(100, mean = 2, sd = 0.04))
我想用 NA 替换此数据框中任何小于 3 的数字,但要确保将被替换的数字添加到该行中数字最大的变量中(这样行总数不会改变)。 例如。对于第 1 行,它看起来像:
50.92756 4.033628 14.36690 1.999160
命令之后应该是这样的:
52.92672 4.033628 14.36690 NA
最佳答案
这是基本的 R 方式。
set.seed(565)
df <- data.frame(rs1 = rnorm(100, mean = 50, sd = 3), rs2 = rnorm(100, mean = 4, sd = 0.2), rs3 = rnorm(100, mean = 15, sd = 1),
rs4 = rnorm(100, mean = 2, sd = 0.04))
df[] <- t(apply(df, 1, \(x) {
i <- which.max(x)
j <- x < 3
if(any(j)) {
x[i] <- x[i] + sum(x[which(j)])
is.na(x) <- j
}
x
}))
head(df, n = 10)
#> rs1 rs2 rs3 rs4
#> 1 52.92672 4.033628 14.36690 NA
#> 2 52.82045 4.088581 12.49494 NA
#> 3 53.94117 3.635854 15.17427 NA
#> 4 49.97355 4.076953 15.06030 NA
#> 5 53.17885 4.020831 13.92384 NA
#> 6 55.86003 4.064562 14.37932 NA
#> 7 51.34426 4.163213 14.22895 NA
#> 8 56.79130 4.029414 14.90220 NA
#> 9 52.20528 4.135510 15.69041 NA
#> 10 52.70072 4.250440 15.14747 NA
由 reprex package (v2.0.1) 创建于 2022-05-26
关于r - 如何在 R 中用 NA 替换数字,但将替换的数字添加到不同的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72392614/