从参考数据框中输入 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"]
}
它适用于我刚刚创建的玩具示例,希望对您有所帮助。
我有一个 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"]
}
它适用于我刚刚创建的玩具示例,希望对您有所帮助。