如何将随机“NA"添加到数据框中 [英] How do I add random `NA`s into a data frame
本文介绍了如何将随机“NA"添加到数据框中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我用随机值创建了一个数据框
I created a data frame with random values
n <- 50
df <- data.frame(id = seq (1:n),
age = sample(c(20:90), n, rep = TRUE),
sex = sample(c("m", "f"), n, rep = TRUE, prob = c(0.55, 0.45))
)
并想介绍一些 NA
值来模拟真实世界的数据.我正在尝试使用 apply
但无法到达那里.线
and would like to introduce a few NA
values to simulate real world data. I am trying to use apply
but cannot get there. The line
apply(subset(df,select=-id), 2, function(x) {x[sample(c(1:n),floor(n/10))]})
可以检索随机值,但是
will retrieve random values alright, but
apply(subset(df,select=-id), 2, function(x) {x[sample(c(1:n),floor(n/10))]<-NA})
不会将它们设置为 NA
.也尝试过 with
和 within
.
will not set them to NA
. Have tried with
and within
, too.
暴力破解:
for (i in (1:floor(n/10))) {
df[sample(c(1:n), 1), sample(c(2:ncol(df)), 1)] <- NA
}
但我更喜欢使用 apply
系列.
But I'd prefer to use the apply
family.
推荐答案
在你的函数中返回 x
:
> df <- apply (df, 2, function(x) {x[sample( c(1:n), floor(n/10))] <- NA; x} )
> tail(df)
id age sex
[45,] "45" "41" NA
[46,] "46" NA "f"
[47,] "47" "38" "f"
[48,] "48" "32" "f"
[49,] "49" "53" NA
[50,] "50" "74" "f"
这篇关于如何将随机“NA"添加到数据框中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文