相关疑难解决方法(0)

用最新的非NA值替换NA

在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)

r zoo r-faq data.table

129
推荐指数
11
解决办法
7万
查看次数

用组值替换NA值

我有一个如下的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)

r na

6
推荐指数
3
解决办法
3651
查看次数

逐个组填充NA值

我试图填充数据集中的一些值.我的数据的简化版本可以在下面找到:

    > 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)

r dplyr data.table

5
推荐指数
1
解决办法
259
查看次数

标签 统计

r ×3

data.table ×2

dplyr ×1

na ×1

r-faq ×1

zoo ×1