Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R用唯一的随机数字替换NAs_R_Replace_Unique - Fatal编程技术网

R用唯一的随机数字替换NAs

R用唯一的随机数字替换NAs,r,replace,unique,R,Replace,Unique,数据帧中有一个变量,看起来像这样 x=c(1,2,4,6,7,NA,NA,5,NA,NA,9) x中的每个元素都是唯一的编号,我希望用唯一的编号替换NAs 我曾经尝试过类似的方法,但我想知道是否有更有效的方法 x[is.na(x)]=sample(10:15,replace=F) Warning message: In x[is.na(x)] = sample(10:15, replace = F) : number of items to replace is not a multipl

数据帧中有一个变量,看起来像这样

x=c(1,2,4,6,7,NA,NA,5,NA,NA,9)
x中的每个元素都是唯一的编号,我希望用唯一的编号替换NAs

我曾经尝试过类似的方法,但我想知道是否有更有效的方法

x[is.na(x)]=sample(10:15,replace=F)
Warning message:
In x[is.na(x)] = sample(10:15, replace = F) :
  number of items to replace is not a multiple of replacement length

谢谢

您可以循环并创建缺失值索引向量,然后将该向量传递到嵌套在其中的
random()
中,以生成要替换缺失值的随机数

# data
x=c(1,2,4,6,7,NA,NA,5,NA,NA,9)
# vector of missing values
v <- NULL
# loop to find missing value indices
for(i in 1:length(x)){
  if(is.na(x[i])==TRUE)
    v <- append(v, i)
}
# replace missing values with a random integer
xnew <- replace(x, v, sample(10, length(v), replace = FALSE))



x
>> 1  2  4  6  7 NA NA  5 NA NA  9
xnew
>> 1  2  4  6  7  5 10  5  4  2  9
#数据
x=c(1,2,4,6,7,NA,NA,5,NA,NA,9)
#缺失值向量
v>1 2 4 6 7 5 10 5 4 2 9
如果您从候选值集中“计算”要采样的项数(
的总和为.na
似乎是一种很好的计算方法),则您不会得到错误:

x[is.na(x)] <- sample(10:15, size=sum(is.na(x)), replace=F)

> x
 [1]  1  2  4  6  7 12 14  5 11 13  9
x[is.na(x)]x
[1]  1  2  4  6  7 12 14  5 11 13  9

可能:
x[is.na(x)]我有点像
x[is.na(x)]它可以是任何唯一的数字吗?它必须是随机生成的吗?一般来说,for循环应该在r中避免(除非它们不能),因为它们运行得非常慢。举一个小例子,比如OP,这并不太糟糕,但对于较大的向量来说效率可能非常低。