用R中特定列中的随机小数替换NA

  • 本文关键字:随机 小数 替换 NA r na dplyr
  • 更新时间 :
  • 英文 :


我试图用R中特定列中的随机小数替换NAs。但是,R生成具有相同尾部分数的随机小数,并且只更改小数之前的部分。以下是我尝试过的方法:

df_LT$ATC[is.na(df_LT$ATC)]  <- sample(seq(10.2354897,23.78954214), size=sum(is.na(df_LT$ATC)), replace=T)

dplyr

df_LT <-  df_LT %>%mutate_at(vars(df_LT$ATC), ~replace_na(., sample(10.2354897:23.78954214, size=sum(is.na(ATC)), replace=T)))

数据如下

A        ATC
1        11.2356879
2        42.58974164
3            NA
4        34.25382343
5             NA 

现在,在ATC列中有NA的地方,我想像其他列一样添加一个小数,但在10:23的范围内。希望这个解释能有所帮助。我可能遗漏了一些显而易见的东西。感谢您提前提供的帮助。

您正在使用seq或冒号运算符:创建样本,这意味着您正在从以下序列进行采样:

seq(10.2354897, 23.78954214)
# [1] 10.23549 11.23549 12.23549 13.23549 14.23549 ....

因此,每一步的起始值都会增加1,使小数点后的数字保持不变。

如果你想在这两个限制范围内对随机数进行采样,你可以这样做:

runif(n = 1, min = 10.2354897, max = 23.78954214)

因此,对于您的示例,这转化为:

df_LT$ATC[is.na(df_LT$ATC)] <- 
runif(n = sum(is.na(df_LT$ATC)), 10.2354897, 23.78954214)

如果你想添加一个条件,你可以做:

df_LT$ATC <- 
ifelse(is.na(df_LT$ATC) & df_LT$A == 3, 
runif(n = nrow(df_LT), 10.2354897, 23.78954214), 
df_LT$ATC)

这将检查ATC是否丢失,以及A是否等于3。如果满足,则用随机数替换缺失的值,否则返回原始值(missin或not(。

最新更新