簡體   English   中英

在 R 中創建多個缺失數據點

[英]Create Multiple Missing Data Points in R

我希望在 R 中創建多個缺失的數據點。

我們將從我的測試數據集開始:

v <- 1:25
matmiss <- matrix(v, nrow = 5)
dfmiss <- as.data.frame(matmiss)

(是的,有一種更簡單的方法可以做到這一點,但現在我不在乎)。

對於我丟失的數據,我的代碼如下所示:

dfmiss[1,1] <- NA
dfmiss[2,2] <- NA
dfmiss[3,3] <- NA
dfmiss[4,4] <- NA
dfmiss[5,5] <- NA

必須有一種更簡單的方法來做到這一點,對吧? 此外,我需要一個瑞士奶酪解決方案——如何隨機生成缺失數據?

背景:我的興趣是改進缺失數據的檢測和插值。

如果您以矩陣格式離開,則更容易完成。

matmiss[diag(matmiss)] <- NA
matmiss
     [,1] [,2] [,3] [,4] [,5]
[1,]   NA    6   11   16   21
[2,]    2   NA   12   17   22
[3,]    3    8   NA   18   23
[4,]    4    9   14   NA   24
[5,]    5   10   15   20   NA

matmiss <- matrix(v, nrow = 5)
N <- 5
matmiss[sample(v,N)] <- NA # "swiss cheese"
matmiss
     [,1] [,2] [,3] [,4] [,5]
[1,]   NA    6   11   16   21
[2,]   NA   NA   12   NA   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   NA   25

令人驚訝的是我第一次使用<<-

數據

v <- 1:25
matmiss <- matrix(v, nrow = 5)
dfmiss <- as.data.frame(matmiss)

NoN <- round(nrow(dfmiss)*ncol(dfmiss)/5)

代碼

replicate(NoN, dfmiss[sample(nrow(dfmiss), 1), sample(nrow(dfmiss), 1)] <<- NA)

Output

  V1 V2 V3 V4 V5
1  1  6 11 16 21
2  2  7 NA 17 22
3  3  8 NA 18 23
4  4  9 14 19 24
5  5 NA NA NA 25

一個整潔的選擇。

library(dplyr)
library(tidyr)

dfmiss %>%
  mutate(id = row_number()) %>%
  pivot_longer(-id) %>%
  mutate(value = if_else(str_sub(name, -1) == id, NA_integer_, value)) %>%
  pivot_wider(names_from = name, values_from = value) %>%
  select(-id)

# # A tibble: 5 x 5
#      V1    V2    V3    V4    V5
#   <int> <int> <int> <int> <int>
# 1    NA     6    11    16    21
# 2     2    NA    12    17    22
# 3     3     8    NA    18    23
# 4     4     9    14    NA    24
# 5     5    10    15    20    NA


dfmiss %>%
  mutate(across(everything(), ~ sample(c(., NA), length(.))))

#   V1 V2 V3 V4 V5
# 1  5  7 11 17 21
# 2  4 10 NA 19 24
# 3  1  9 15 16 22
# 4 NA  8 12 18 NA
# 5  2 NA 14 NA 25

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM