gpt4 book ai didi

r - 使用 R 在数据框中生成随机缺失值

转载 作者:行者123 更新时间:2023-12-02 00:58:58 24 4
gpt4 key购买 nike

我有一个简单的数据框示例,如下所示:

a    b   c

10 50 100

45 36 27

15 80 90

预期的输出如下所示。

a   b   c

10 NA 100

NA NA NA

15 80 27

我尝试的编程如下:

insert_nas <- function(x) {

len <- length(x)

n <- sample(1:floor((0.01*(dim(x)[1]))), 1)

i <- sample(1:len, n)

x[i] <- NA

x

}


> sapply(incomplete.data,insert_nas)

Error in 1:floor((0.01 * (dim(x)[1]))) : argument of length 0

但是,出现了错误。
如何生成数据框中 1% 缺失的随机缺失值?

最佳答案

您的错误来源:

sapply 调用试图将函数 insert_nas 应用于 incomplete.data 的每个元素(在此上下文中,a 的元素数据框是它的列)。应用于原子向量的函数 dim 产生 NULL;乘以一个常数得到长度为 0 的数值向量;应用 floor 不会改变这一点;最后尝试生成一个由空向量界定的序列会出错。

如何消除错误:

据推测,dim(x)[1] 您打算获取数据帧中的行数(这是当 x 是数据帧而不是比它的一列)。尝试用 length(x) 替换它。

对于任意分布的 NA 选择:

要将值的某些比例 p 更改为 NA,在不考虑列位置的情况下进行分布,似乎最直接的方法是在整个数据框选择要设置为 NA 的元素:

sel <- sample( nrow(df)*ncol(df), size = p*nrow(df)*ncol(df) )
for(t in 1:length(sel)){
is.na(df[[sel[t]%/%nrow(df) +1]]) <- sel[t]%%nrow(df) + 1
}

关于r - 使用 R 在数据框中生成随机缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com