首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制列表元素以填充NA列表元素

复制列表元素以填充NA列表元素
EN

Stack Overflow用户
提问于 2017-02-24 16:16:51
回答 2查看 97关注 0票数 3

下面是我现在的代码

代码语言:javascript
复制
set.seed(20)
test_list <- list("1" = matrix(rnorm(100), 10, 10), 
                  "2" = NA, 
                  "3" = NA, 
                  "4" = NA, 
                  "5" = NA, 
                  "6" = matrix(rnorm(100), 10, 10), 
                  "7" = NA, 
                  "8" = NA)

我想找到一种方法,将不包含安娜的列表元素与前面的元素内容一起复制,以便每个list元素都被填充。元素1-5将包含元素1中的矩阵,6-8将包含元素6中的矩阵。我可以在不使用NAs作为应该复制的元素的情况下设置这个问题(如果使用NULL或其他类似的方法可以帮助解决问题)。

提前感谢您的任何建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-24 16:23:57

您可以在Reduce模式下使用accumulate函数(可能对非常大的数据不起作用):

代码语言:javascript
复制
str(test_list)
#List of 8
# $ 1: num [1:10, 1:10] 1.163 -0.586 1.785 -1.333 -0.447 ...
# $ 2: logi NA
# $ 3: logi NA
# $ 4: logi NA
# $ 5: logi NA
# $ 6: num [1:10, 1:10] 0.548 -0.226 1.217 0.701 0.912 ...
# $ 7: logi NA
# $ 8: logi NA


fill_list <- Reduce(function(x, y) if(all(is.na(y))) x else y, test_list, acc = TRUE)

str(fill_list)
#List of 8
# $ : num [1:10, 1:10] 1.163 -0.586 1.785 -1.333 -0.447 ...
# $ : num [1:10, 1:10] 1.163 -0.586 1.785 -1.333 -0.447 ...
# $ : num [1:10, 1:10] 1.163 -0.586 1.785 -1.333 -0.447 ...
# $ : num [1:10, 1:10] 1.163 -0.586 1.785 -1.333 -0.447 ...
# $ : num [1:10, 1:10] 1.163 -0.586 1.785 -1.333 -0.447 ...
# $ : num [1:10, 1:10] 0.548 -0.226 1.217 0.701 0.912 ...
# $ : num [1:10, 1:10] 0.548 -0.226 1.217 0.701 0.912 ...
# $ : num [1:10, 1:10] 0.548 -0.226 1.217 0.701 0.912 ...
票数 3
EN

Stack Overflow用户

发布于 2017-02-24 17:48:22

is.na可以处理“list”,确切地说,这里需要的方式是:在单个NA的情况下返回TRUE

代码语言:javascript
复制
is.na(test_list)
#    1     2     3     4     5     6     7     8 
#FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE

is.na的这种行为也使得对“list”的测试非常有效,因为它避免了使用(length != 1)检查任何元素。

在此基础上构建NA locf功能:

代码语言:javascript
复制
cummax((!is.na(test_list)) * seq_along(test_list))
#1 2 3 4 5 6 7 8 
#1 1 1 1 1 6 6 6 

我们子集test_list

代码语言:javascript
复制
test_list[cummax((!is.na(test_list)) * seq_along(test_list))]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42443386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档