在第一次观察发生后替换NA

时间:2017-12-16 14:37:45

标签: r na

我的数据包含“username”行,然后是2016-09-06至2017-09-30每天的列,其中每一天都是一列。

在观察发生的日子里,每个用户都有值L,T和C.对于没有观察的日期,我有NA。

我想用L替换NA,但仅在用户进行第一次观察后才用。所以:

NA NA NA NA L NA NA L T C. 会成为 NA NA NA NA L L L L TC

我的数据中有一小部分,但不知道如何将其插入到问题中。如果需要,请告诉我如何提供这个。

提前致谢。

2 个答案:

答案 0 :(得分:1)

na.locf0(x)会将NA值填入x中最后一个值,同时保留前导NA值,使其输出长度与其相同输入;因此,如果na.locf(x)中的某个位置不是NA,但NAx的相同位置是na.locf0,则x会将其填入。这些位置具有值在下面的代码中显示的逻辑表达式中为TRUE,因此将"L"的值设置为replace。我们使用x非破坏性地执行此操作(即我们输出所需的向量而不修改library(zoo) x <- c(NA, NA, NA, NA, "L", NA, NA, "L", "T", "C") # test data replace(x, !is.na(na.locf0(x)) & is.na(x), "L") ## [1] NA NA NA NA "L" "L" "L" "L" "T" "C" 本身)。

L

注意

如果我们知道要填写的所有NA都遵循na.locf0(x) (如问题中的示例数据)那么

replace

就足够了;但是,如果一般情况与问题中所述相同,则需要上面的NA代码。

变异

上述内容的一种变体是用"L"替换所有NA值,然后用na.locf0(x)替换NAreplace(replace(x, is.na(x), "L"), is.na(na.locf0(x)), NA) ## [1] NA NA NA NA "L" "L" "L" "L" "T" "C" 的位置

% Example Data
superset = {
    [0.983 0.711 0.000];
    [1.000 0.020 0.668];
    [0.237 1.000 1.000];
    [0.245 0.707 0.544];
    [0.000 0.000 0.000]
};

% Example Condition: RGB is Pure Black
subset_idx = cell2mat(cellfun(@(x) all(x == 0),superset,'UniformOutput',false));

% Subset Extraction
subset = superset(subset_idx);

答案 1 :(得分:1)

我们可以做到

library(zoo)
na.locf(vec, na.rm = FALSE)
#[1] NA  NA  NA  NA  "L" "L" "L" "L" "T" "C"

数据

vec <- c(NA, NA, NA, NA, 'L', NA, NA, 'L', 'T', 'C')