从 data.table 列表中提取特定的组值并作为 R 中的向量返回

问题描述 投票:0回答:1

我有一些数据的列表,它看起来像:

library(data.table)

dt1 <- data.table(age_group = c("young", "old"), ratio = runif(2))
dt2 <- data.table(age_group = c("young", "old"), ratio = runif(2))

dt_list <- list(
    list(ratio_by_group = dt1),
    list(ratio_by_group = dt2),
    list(ratio_by_group = NA)
)
dt_list
[[1]]
[[1]]$ratio_by_group
   age_group     ratio
1:     young 0.5956572
2:       old 0.5053023


[[2]]
[[2]]$ratio_by_group
   age_group     ratio
1:     young 0.4632962
2:       old 0.2356656


[[3]]
[[3]]$ratio_by_group
[1] NA

我希望精确获取特定群体(即“年轻”)的比率信息并将其作为向量返回。我使用了以下代码:

sapply(dt_list, function(x) ifelse(!is.na(x$ratio_by_group), x$ratio_by_group[age_group=='young', ratio], NA))
          [,1]      [,2]
[1,] 0.5956572 0.4632962
[2,] 0.5956572 0.4632962
[3,] 0.5956572 0.4632962
[4,] 0.5956572 0.4632962

我的预期输出是

[1] "0.5956572" "0.4632962" NA 
r filter data.table apply sapply
1个回答
0
投票

使用递归:

fn <- function(x){
    if(is.data.table(x)) x[age_group == 'young', ratio]
    else if(is.list(x[[1]])) unlist(lapply(x, fn),use.names = FALSE)
}

fn(dt_list)
[1] 0.6224014 0.8436315
© www.soinside.com 2019 - 2024. All rights reserved.