考虑这个简单的数据框
> 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
我在这里想念什么? 谢谢
答案 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))