[英]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.