从参考数据框中输入 R 中的缺失值

Imputing Missing Values in R from reference data frame

我有一个 17000 x 3 暗淡步行数据的数据框 'dat'。间隔列是每 24 小时周期的 5 分钟间隔,日期列是日期,步数列是在所述日期的所述 5 分钟周期内采取的步数。 NA 存在。

> head(df1)
  steps       date interval
1    NA 2012-10-01        0
2    NA 2012-10-01        5
3    NA 2012-10-01       10
4    NA 2012-10-01       15
5    NA 2012-10-01       20
6    NA 2012-10-01       25

我使用 dplyr 按日期对我的 df 进行分组,然后创建一个新的 df 'df.1' 并将其汇总为 avg=mean(df.1$steps , na.rm = 真)。这给了我每个日期步数平均值的一个很好的小 df

         date      avg
1  2012-10-01      NaN
2  2012-10-02  0.43750
3  2012-10-03 39.41667
4  2012-10-04 42.06944
5  2012-10-05 46.15972
6  2012-10-06 53.54167

我想做的是用每个日期的平均值更新我原来的 df 的 NA 值。

所以在第一个 table 中,2012-10-02 是 NA,然后我想用值 0.43750 替换 table 中 2012-10-02 的所有 NA 值。我试过使用索引,其中 %in% 应用了 family,但找不到任何有用的东西。

如有任何帮助,我们将不胜感激。

这有点笨拙,但它有效:

library(dplyr)
df1.1 <- df1 %>%
    group_by(date) %>%
    summarise(avg = mean(steps, na.rm = TRUE)) %>%
    merge(df1, ., all.x=TRUE) %>%
    mutate(steps = ifelse(is.na(steps)==TRUE, avg, steps)) %>%
    select(-avg)

这是我的玩具数据:

df1 <- data.frame(date = c(rep("2015-01-01", 12), rep("2015-01-02", 12)), interval = rep(seq(12), 2),
    steps = c(5, 7, NA, 12, 3, NA, 0, 4, 12, 10, 4, 0, 3, NA, 2, 1, NA, 15, 0, 4, 7, 2, NA, 2),
    stringsAsFactors = FALSE)

看起来像:

> head(df1)
        date interval steps
1 2015-01-01        1     5
2 2015-01-01        2     7
3 2015-01-01        3    NA
4 2015-01-01        4    12
5 2015-01-01        5     3
6 2015-01-01        6    NA 

这是结果的头部,df1.1:

> head(df1.1)
        date interval steps
1 2015-01-01        1   5.0
2 2015-01-01        2   7.0
3 2015-01-01        3   5.7
4 2015-01-01        4  12.0
5 2015-01-01        5   3.0
6 2015-01-01        6   5.7

这里有一个 table 的组意味着显示那些 5.7 的来源:

> df1 %>% group_by(date) %>% summarise(avg = mean(steps, na.rm = TRUE))
Source: local data frame [2 x 2]

        date avg
1 2015-01-01 5.7
2 2015-01-02 4.0

如果 df1 是您的原始数据框并且 df.1 是包含日期平均值的数据框,我认为一个简单的 for 循环可以解决它:

for(i in df.1$date){
  df1[df1$date==i,"steps"]=df.1[df.1$date==i,"avg"]
}

它适用于我刚刚创建的玩具示例,希望对您有所帮助。