【问题标题】:Filling elements in list with NA's up to 3 [duplicate]用NA填充列表中的元素最多3个[重复]
【发布时间】:2021-06-27 14:10:00
【问题描述】:

让我们考虑以下列表:

lst <- list((c("A")), (c("B")), (c("A", "B")), (c("A", "B", "C")))

列表的第一个和第二个元素包含一个元素,第三个包含两个元素,最后一个包含三个元素。我想要做的是用 NA 填充每个元素,以便每个元素都具有相同的长度。即

现在我们有了:

 lst
[[1]]
[1] "A"

[[2]]
[1] "B"

[[3]]
[1] "A" "B"

[[4]]
[1] "A" "B" "C"

我想拥有:

 lst
[[1]]
[1] "A" NA NA 

[[2]]
[1] "B" NA NA 

[[3]]
[1] "A" "B" NA

[[4]]
[1] "A" "B" "C"

我的第一个想法当然是使用replapply。所以:

lapply(lst, function(x) rep(NA, 3 - length(x)))

但是,我对lapply 函数的理解似乎并不像它正在工作的那样。你能帮我解决这个问题吗?

【问题讨论】:

    标签: r string list character lapply


    【解决方案1】:

    1) 使用长度

    lapply(lst, "length<-", max(lengths(lst)))
    

    给予:

    [[1]]
    [1] "A" NA  NA 
    
    [[2]]
    [1] "B" NA  NA 
    
    [[3]]
    [1] "A" "B" NA 
    
    [[4]]
    [1] "A" "B" "C"
    

    2) 另一种方法是将每个组件转换为 ts 系列,因为即使没有相同的长度,这些组件也可以被 cbind'ed,然后转换回未命名的普通向量列表。这种方法只有在组件的类型与问题示例中的情况相同时才有效。

    unname(lapply(do.call("cbind", lapply(lst, ts)), as.vector))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多