【发布时间】:2021-07-08 13:02:21
【问题描述】:
我一直在尝试研究如何使用 for 循环将某些列中的 NA 值替换为列的中位数。 到目前为止,我有这个:
for (i in 1:ncol(merged_df_edit3)){
if(is.na(merged_df_edit3[,i]) == TRUE){
assign(merged_df_edit3[,i],replace_na(median(merged_df_edit3[,i])))
}
}
这可以运行,但会发出警告:
"在 if (is.na(merged_df_edit3[, i]) == TRUE) { ... : 条件 长度 > 1 且仅使用第一个元素”
但是,当我检查数据框时,它根本没有替换任何值。
我使用的数据混合了数字、日期和字符,就像这样。 字符栏中有一些空白,但我不需要填写。
df <- tribble(
~`date Column`, ~`Numeric Column`, ~`Character Column`,
"1/1/2011", 123, "Left",
"1/2/2011", 124, "Right",
"1/3/2011", 125, "Left",
"1/4/2011", NA, "NA",
"1/5/2011", 132, "Right"
)
谢谢!
【问题讨论】:
-
能否请您包含一些代码来生成示例数据集,以及加载您使用的包的代码?
replace_na()不是基本函数。 -
需要注意的是
is.na对其输入进行矢量化操作。所以它返回一个与输入长度相同的逻辑向量。当您将其放入if语句时,只会检查第一个元素,因为if不会遍历向量,为此我们需要一个for循环。
标签: r