r - 使用每列精确数量的随机 NA 覆盖数据帧值

标签 r

我使用此代码在数据帧内生成随机数量的 NA。这是一个例子

set.seed(1)
df <- mtcars[1:10,]
df <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.7, 0.3), size = length(cc), replace = TRUE) ]))

> df
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1  21.0   6    NA 110   NA 2.620    NA  0  1    4    4
2  21.0   6 160.0 110 3.90    NA 17.02 NA NA    4    4
3  22.8   4 108.0  93   NA 2.320 18.61  1  1    4    1
4    NA   6 258.0 110 3.08 3.215 19.44  1  0   NA   NA
5  18.7  NA 360.0  NA 3.15 3.440 17.02  0 NA   NA    2
6    NA   6 225.0 105   NA 3.460 20.22 NA  0   NA    1
7    NA  NA 360.0  NA 3.21 3.570 15.84 NA NA    3    4
8  24.4  NA 146.7  62 3.69 3.190    NA  1  0    4    2
9  22.8   4    NA  NA   NA 3.150 22.90 NA  0   NA   NA
10 19.2  NA 167.6 123 3.92 3.440    NA NA  0    4    4

这很有用,但数据帧中每列的 NA 不一致。我想要每列的 NA 的确切数量。有没有办法为每列创建 3 个随机 NA?非常感谢

最佳答案

我们可能sample row_number()replace确切编号为 NA 的列

library(dplyr)
df1 <- df %>%
   mutate(across(everything(),
     ~ replace(.x, sample(row_number(), 3), NA)))

-输出

df1
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0  NA 160.0  NA 3.90    NA    NA  0  1   NA    4
Mazda RX4 Wag     21.0  NA    NA 110 3.90 2.875 17.02  0 NA    4    4
Datsun 710        22.8   4    NA  NA 3.85 2.320 18.61  1  1   NA    1
Hornet 4 Drive      NA   6 258.0 110 3.08 3.215 19.44  1 NA   NA    1
Hornet Sportabout 18.7  NA 360.0  NA   NA 3.440    NA NA  0    3    2
Valiant           18.1   6 225.0 105   NA 3.460 20.22  1  0    3   NA
Duster 360          NA   8    NA 245 3.21    NA 15.84  0  0    3   NA
Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            NA   4 140.8  95   NA 3.150 22.90 NA NA    4    2
Merc 280          19.2   6 167.6 123 3.92    NA    NA NA  0    4   NA

base R ,我们通过使用 lapply 循环遍历列来执行相同的步骤

df[] <- lapply(df, \(x) replace(x, sample(seq_along(x), 3), NA))

关于r - 使用每列精确数量的随机 NA 覆盖数据帧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71286349/

相关文章:

r - Dplyr 变异 : making the difference between vector to be taken element wise and vectors to be taken as vector

r - 将顶点大小与 igraph 中的标签大小匹配

java - 在 Java 应用程序中使用外部包时,是否需要将它们完全包含在 JAR 中?

r - 在 R 中使用 marrangeGrob 和 ggsave 的多页 PDF 的页面标题

r - 在 R 中对数据进行排序

r - 如何以与引用线本身相同的角度注释引用线?

r - GLMER : Error: (maxstephalfit) PIRLS step-halvings failed to reduce deviance in pwrssUpdate

sql - 如何创建 R 中两行相减的新列?

email - 使用 sendmailR,我如何指定收件人/发件人姓名以及地址?

r - 确定 R 图的右下角