向前填充所有变量的所有缺失值

时间:2018-09-10 16:33:28

标签: r tidyr

考虑这个简单的数据框

> data_frame(var1 = c(NA, 1 , NA),
+            var2 = c (NA, 3, NA))
# A tibble: 3 x 2
   var1  var2
  <dbl> <dbl>
1    NA    NA
2     1     3
3    NA    NA

我想为数据框中的所有列填充所有缺少的值。在我看来tidyr::fill()可以做到这一点,但是如果不一次指定一列就无法使它起作用。

> data_frame(var1 = c(NA, 1 , NA),
+            var2 = c (NA, 3, NA)) %>% tidyr::fill(.direction = 'down')
# A tibble: 3 x 2
   var1  var2
  <dbl> <dbl>
1    NA    NA
2     1     3
3    NA    NA

输入列名时似乎可行

> data_frame(var1 = c(NA, 1 , NA),
+            var2 = c (NA, 3, NA)) %>% tidyr::fill(var1, .direction = 'down')
# A tibble: 3 x 2
   var1  var2
  <dbl> <dbl>
1    NA    NA
2     1     3
3     1    NA

我在这里想念什么? 谢谢

2 个答案:

答案 0 :(得分:5)

tidyr动词接受dplyr::select列规范,因此您可以使用everything()

library(tidyverse)

df <- data_frame(var1 = c(NA, 1 , NA),
                 var2 = c (NA, 3, NA))

df %>% fill(everything())
#> # A tibble: 3 x 2
#>    var1  var2
#>   <dbl> <dbl>
#> 1    NA    NA
#> 2     1     3
#> 3     1     3

答案 1 :(得分:2)

我们可以使用syms将列名转换为符号并求值(!!!

d1 %>% 
  tidyr::fill(!!! rlang::syms(names(.)), .direction = 'down')
# A tibble: 3 x 2
#   var1  var2
#  <dbl> <dbl>
#1    NA    NA
#2     1     3
#3     1     3

数据

d1 <- data_frame(var1 = c(NA, 1 , NA), var2 = c (NA, 3, NA))