小编Hel*_*san的帖子

仅使用 Mutate 和 Case_When 来填充 NA 行

我已经盯着看几个小时了,我不知道在哪里可以找到像这样简单的问题的答案,所以我希望这不是一个重复的问题。

我有一个大数据框(936848 x 12),其中一列是一个编码名称,我可以从中导出其他列的值,在本例中,制造年份是根据列代码的第一个字符得出的。

数据框的小样本:

df <- data.frame(Code = c("AX123", "CL199", "GH679"), 
                 Year = c(NA, "2014", "2018")) 
Run Code Online (Sandbox Code Playgroud)

我只想仅在值丢失时才根据列代码更改“年份”列。我不想覆盖年份列中的现有值。

由于这还涉及识别代码中字符串中的第一个字母,因此我使用case_whenand startsWith

df <- df %>%
  filter(is.na(Year)) %>%
  mutate(Year = case_when(startsWith(Code, "A") ~ 2013,
                          startsWith(Code, "C") ~ 2014,
                          startsWith(Code, "D") ~ 2015,
                          startsWith(Code, "E") ~ 2016,
                          startsWith(Code, "F") ~ 2017,
                          startsWith(Code, "G") ~ 2018,
                          startsWith(Code, "H") ~ 2019,
                          startsWith(Code, "J") ~ 2020,
                          TRUE ~ NA_real_
                          ))
Run Code Online (Sandbox Code Playgroud)

这将给出这个结果:

   Code Year
1 AX123 2013
Run Code Online (Sandbox Code Playgroud)

我的问题是我编写此过滤器以过滤掉数据框中所有非 NA 行的方式。我想保持数据框不变,只填充 NA 行。

我正在考虑将其嵌套到 ifelse …

r filter missing-data dataframe dplyr

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

标签 统计

dataframe ×1

dplyr ×1

filter ×1

missing-data ×1

r ×1