我正在寻找一个函数来帮助填充包含具有先前值的列表的列的元素。
library(tidyverse)
test <- right_join(
data_frame (Numbers = c(1,3,5,10),
LotsOflist = c(list(A=1),
list(B=2),
list(C=3),
list(D=4)
)),
data_frame(Numbers = 1:10))
test
# A tibble: 10 × 2
Numbers LotsOflist
<dbl> <list>
1 1 <dbl [1]>
2 2 <NULL>
3 3 <dbl [1]>
4 4 <NULL>
5 5 <dbl [1]>
6 6 <NULL>
7 7 <NULL>
8 8 <NULL>
9 9 <NULL>
10 10 <dbl [1]>
专栏&#34; LotsOfLists&#34;有一些由于连接而为NULL的列表。我想将NULL替换为最后一个列表。我希望它的工作方式类似于动物园包中的na.locf(),它填充NA并且最后一个对象结转,但找不到任何适用于列的列。
test2 <- data_frame(LotsOfNumbers = c(1,2,NA,NA,NA,7))
test2
# A tibble: 6 × 1
LotsOfNumbers
<dbl>
1 1
2 2
3 NA
4 NA
5 NA
6 7
library(zoo)
test2 %>%
mutate(LotsOfNumbers_Filled = na.locf(LotsOfNumbers))
# A tibble: 6 × 2
LotsOfNumbers LotsOfNumbers_Filled
<dbl> <dbl>
1 1 1
2 2 2
3 NA 2
4 NA 2
5 NA 2
6 7 7
编辑:
原来的问题得到了回答,但事实证明,如果专栏有数据框架,那么答案就不起作用了。有人能找到data.frames的解决方案吗?
test <- right_join( data_frame (Numbers = c(1,3,5,10),
LotsOflist = c(list(data.frame(A=1)),
list(data.frame(B=2)),
list(data.frame(C=3)),
list(data.frame(D=4)) )),
data_frame(Numbers = 1:10))
答案 0 :(得分:0)
na.locf
起作用:
library(zoo)
test %>%
mutate(LotsOflist = na.locf(replace(LotsOflist, sapply(LotsOflist, is.null), NA)))
答案 1 :(得分:0)
na.locf的tidyr版本与列表一起使用。
test %>%
fill(LotsOflist)