r - 用 R 中特定列中的随机小数替换 NA
问题描述
我试图用NA
R 中特定列中的随机小数替换 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。如果满足,则将丢失的值替换为随机数,否则返回原始值(无论是否丢失)。
推荐阅读
- qt - 如何注册像 QList 这样的类型
在 QJSEngine 中? - ruby-on-rails - Sprockets::Rails::Helper::AssetNotFound in Tags#show
- javascript - 为什么打字稿中不推荐使用“类型”?
- python - 嵌套列表理解-双迭代-Python中的经典CS问题-第3章-单词搜索
- powershell - forloop 正在循环,但只有相同的字符串
- python - 在 Python 列表中查找表示数字的连续字符串
- c - 设计一个算法来判断是否存在这样一个key等于数组中其他两个key之和
- excel - 根据以前的结果和 Excel 上的百分比计算最有可能的下一个结果
- python - 将 HTML 颜色名称转换为十六进制
- r - 多个公式叠加在散点图上