在data.frame(或data.table)中,我想用最近的非NA值"填充"NA.一个简单的例子,使用向量(而不是a data.frame)如下:
> y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA)
Run Code Online (Sandbox Code Playgroud)
我想要一个fill.NAs()允许我构造的函数yy:
> yy
[1] NA NA NA 2 2 2 2 3 3 3 4 4
Run Code Online (Sandbox Code Playgroud)
我需要对许多(总计~1 Tb)小尺寸data.frames(~30-50 Mb)重复此操作,其中一行是NA,其所有条目都是.解决问题的好方法是什么?
我做的丑陋的解决方案使用这个功能:
last <- function (x){
x[length(x)]
}
fill.NAs <- function(isNA){
if (isNA[1] == 1) {
isNA[1:max({which(isNA==0)[1]-1},1)] <- 0 # first is NAs
# can't be forward filled
}
isNA.neg <- isNA.pos <- isNA.diff <- diff(isNA)
isNA.pos[isNA.diff < 0] <- …Run Code Online (Sandbox Code Playgroud) 我有一个如下的df,它有5个家庭的20个人.家庭中的一些人缺少他们是否有医疗卡的数据.我想给这些人提供与其家庭中其他人相同的价值(不是NA值,实际二进制值是0或1).
我尝试了以下代码,这是我认为正确方向的一步 - 但不是100%正确,因为a)如果每个家庭的med_card的第一个值是NA而b)它没有,它就不起作用为所有家庭成员取代NA 1.
DF<- ddply(df, .(hhold_no), function(df) {df$med_card[is.na(df$med_card)] <- head(df$med_card, na.rm=TRUE); return(df)})
Run Code Online (Sandbox Code Playgroud)
任何指针都将非常感谢,谢谢
样本df
df
person_id hhold_no med_card
1 1 1 1
2 2 1 1
3 3 1 NA
4 4 1 NA
5 5 1 NA
6 6 2 0
7 7 2 0
8 8 2 0
9 9 2 0
10 10 3 NA
11 11 3 NA
12 12 3 NA
13 13 3 1
14 14 3 1
15 15 4 1 …Run Code Online (Sandbox Code Playgroud) 我试图填充数据集中的一些值.我的数据的简化版本可以在下面找到:
> example_df
Date GROUP value
157 2018-01-31 10180 3.464
158 2018-02-28 10180 3.413
159 2018-03-31 10180 3.418
160 2018-04-30 10180 NA
161 2018-05-31 10180 NA
162 2018-06-30 10180 NA
163 2018-07-31 10180 NA
164 2018-08-31 10180 NA
165 2018-09-30 10180 NA
166 2018-10-31 10180 NA
167 2018-11-30 10180 NA
168 2018-12-31 10180 NA
169 2019-01-31 10180 NA
170 2019-02-28 10180 NA
171 2019-03-31 10180 NA
172 2019-04-30 10180 NA
173 2019-05-31 10180 NA
174 2019-06-30 10180 NA
175 2019-07-31 …Run Code Online (Sandbox Code Playgroud)