r - 如何在 R 中用 NA 替换数字,但将替换的数字添加到不同的变量?

标签 r row

我有一些数据:

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/

相关文章:

text - Flutter:文本剪辑在连续时不起作用

R 读取 zip 数据文件而不解压缩它(信息丢失)

用 knitr 编译后将 Emacs 缓冲区焦点返回到 R

r - 合并两个具有重复列的数据框

C程序: print in text file 2 numbers in row

mfc - 如何专门阻止或锁定列表控件(报 TableView )中的行选择

ruby - 将一行(数组)添加到空矩阵

r - 如何停止 ggplot 线图添加填充

使用 map/ifelse/when 嵌入 xts 对象的 R purrr 数据操作

html - 在单行图像中裁剪到最短的图像高度?