【发布时间】:2018-11-28 18:30:48
【问题描述】:
嘿,我需要先填写数据框的缺失值,然后才能在闪亮的应用程序上运行它们。规则是使用整个数据框的 K-1 列中的值填写 K 列中的缺失值。
我实际上已经想出了如何做到这一点,但我认为我的方式太复杂了。我相信应该有更简单的方法来做到这一点。我在这里附上数据、代码和输出。如果您有更简单的方法,请告诉我。
非常感谢。
data2 = data.frame('population by age' = seq(3, 24, by = 1),
'2008' = c(145391,
140621,
136150,
131944,
127968,
124209,
120650,
117163,
113674,
110207,
106871,
103659,
100398,
97017,
93584,
90240,
86957,
83783,
80756,
77850,
75003,
72226
),
'2009' = c(148566,
143943,
139367,
135083,
131052,
NA,
123628,
120213,
116826,
113381,
109915,
106574,
103346,
100058,
96644,
93175,
NA,
86455,
NA,
80192,
77279,
74422
),
'2010' = c(152330,
147261,
142555,
138172,
134071,
130214,
126559,
123099,
119825,
116538,
113134,
109669,
106320,
103075,
99760,
96312,
92805,
NA,
NA,
82733,
79661,
76739
),
'2011' = c(156630,
151387,
146491,
141905,
137593,
133545,
129737,
126124,
122678,
NA,
116093,
112666,
109174,
105791,
102505,
99159,
95699,
92193,
88759,
85373,
82123,
79065
))
data7 <- data2 %>%
gather(key = year, value = value, -`population.by.age` )%>%
group_by(`population.by.age`) %>%
nest
library(imputeTS)
impute_nas <- function(df, var, fun, ...) {
df[[var]] <- fun(df[[var]], ...)
return(df)
}
imputed <- data7 %>%
mutate(
interpolation = purrr::map(data, impute_nas, var = 'value', fun = imputeTS::na.locf)
) %>%
select(-data) %>%
unnest
imputed <- imputed %>% spread(key = 'year', value = 'value')
as.data.frame(imputed)
最好的,
【问题讨论】:
-
您在问如何估算
NA值。使用这种方法,您将如何处理第一列中的NA值?没有第零列? -
我同意第一列中没有第零列。但好在第一列中没有 NA。所以让我们从这里开始吧。
-
@Cathy 你想让它有级联效应吗?意思是
2列2中的1列中的值将填充1列中的值,然后3列中的NA将填充2列中的值等等...请确认。跨度> -
是的。但是如果第 2 列和第 3 列都是 Na,则应该使用第 1 列中的值。