R 正向填充所有变量的所有缺失值

R 正向填充所有变量的所有缺失值,r,tidyr,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 当输入列名时,它似乎起作用 > data_frame(var1 = c(NA, 1 , NA), +

考虑这个简单的数据帧

> 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
当输入列名时,它似乎起作用

> 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
数据帧(var1=c(NA,1,NA), +var2=c(NA,3,NA))%>%tidyr::fill(var1,.direction='down') #一个tibble:3x2 var1 var2 1娜娜 2 1 3 31 NA 我错过了什么?
谢谢

我们可以将列名转换为带有符号的符号(
syms
)并计算(
!!!

d1%>%
tidyr::fill(!!!rlang::syms(name(.),.direction='down'))
#一个tibble:3x2
#var1 var2
#   
#1娜娜
#2     1     3
#3     1     3
数据
d1tidyr动词接受
dplyr::选择列规范,这样您就可以使用
everything()

库(tidyverse)
df%填充(所有内容())
#>#tibble:3 x 2
#>var1 var2
#>    
#>1娜娜
#> 2     1     3
#> 3     1     3

想知道如果不能在这里使用,为什么所有的变量()都存在。。。不管怎样,我还是搞不懂。@Frank文档
中的一组列似乎不一致。如果为空,则选择所有变量
我喜欢这两种解决方案,但您知道我在这个阶段无法收回我的accept。。谢谢阿利斯泰尔!嗨,我喜欢你的答案。我想知道(我找不到)是否有类似于fill_if函数的功能,即fill_if(is.character),可以只选择那些满足某些条件的列。虽然您可以编写它,但目前还没有。最快的方法可能是使用
purrr::modify_if
和按向量填充,例如
df%>%modify_if(is.character,zoo::na.locf)
> 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
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))