我有一个数据列表,它看起来是这样的:

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

我希望tp精确显示特定组(即‘Young’)的比率信息,并将其作为向量返回.我使用了以下代码:

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

我的预期yields 是

[1] "0.5956572" "0.4632962" NA 

推荐答案

使用递归:

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

R相关问答推荐

将带有范围的字符串转换为R中的数字载体

如何创建构成多个独立列条目列表的收件箱框列?

r—绘制相交曲线

如何在所有绘图中保持条件值的 colored颜色 相同?

R—将各种CSV数字列转换为日期

从外部文件读取多个值作为字符向量

如何在分组条形图中移动相关列?

从R中的对数正态分布生成随机数的正确方法

在另一个包中设置断点&S R函数

如何在反曲线图中更改X标签

我是否可以使用多个变异项来构建顺序列(标记多个问题)

R中治疗序列的相对时间指数

R仅当存在列时才发生变异

TidyVerse中长度不等的列结合向量

如何使用包metaviz更改标签的小数位数?

计算多变量的加权和

将数据从一列转换为按组累计计数的单个虚拟变量

以R表示的NaN值的IS.NA状态

在子图内和子图之间对齐行数不均匀的表格罗布对

Gggvenn为Venn增加了不存在的价值