r - R中是否有一个函数可以用行标准平均值替换NA?

标签 r replace na

我有一个 tibble 正在与专栏中的 NA 一起使用。我想用列和队列名称列的平均值替换 NA(数字列)。例如,第二行的 NA 将替换为队列为“B”的平均值。对于所有具有 NA 的队列 B,NA 应为 150。

call_center_tbl <- tribble(~queue_name, ~talk_time,
        "A", 230,
        "B", "NA",
        "C", 150,
        "A", 200,
        "B", 100,
        "B", 200,
        "C", "NA")

我希望这是有道理的。谢谢你!

最佳答案

使用 data.table 的一种方法如下。在您的数据中,talk_time 是有特征的。所以我将该列转换为数字。然后,对于每个 queue_name,我使用 replace() 将 NA 替换为每组的平均值。

library(data.table)

setDT(call_center_tbl)[, talk_time := as.numeric(talk_time)][,
   talk_time :=  replace(talk_time,
                         list = which(is.na(talk_time)),
                         values = mean(talk_time, na.rm = TRUE)),
   by = queue_name][]

   queue_name talk_time
1:          A       230
2:          B       150
3:          C       150
4:          A       200
5:          B       100
6:          B       200
7:          C       150

如果需要,您可以使用 nafill() 代替 replace()

setDT(call_center_tbl)[, talk_time := as.numeric(talk_time)][,
                          talk_time := nafill(x = talk_time, fill = mean(talk_time, na.rm = TRUE)),
                                  by = queue_name][]

关于r - R中是否有一个函数可以用行标准平均值替换NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528973/

相关文章:

r - Lubridate 创建间隔运算符 %--% 抛出 "' 原点'必须提供“NA 上的错误

python - 保存 Pandas 数据框但保留 NA 值

r - R中的ave()函数和mean()函数有什么区别?

r - "df[] <-"在R中做什么

mysql - SQL - 如何用其他人替换具有 100 列的整个表中的字符?

php - 从摘录中删除短代码(有代码)

r - 将绘图导出到 Plot.ly 时出错

r - 如何判断下标是否越界?

python - 在 Redshift 中创建 Python UDF 以替换字符串中的字符

R:将 NA 替换为 seq 日期