我试图用R中特定列中的随机小数替换NA
s。但是,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(。