【问题标题】:R Subset Nested ListR子集嵌套列表
【发布时间】:2017-07-02 16:00:19
【问题描述】:

使用 R 基础,我想对嵌套列表进行子集化,其中每个列表元素的子集条件都会发生变化。下面是一个例子。谢谢。

#CREATE EXAMPLE NESTED LIST
DF <- expand.grid(NAME = c("FRANK", "TONY", "ED"), YEAR = c(2014:2016), NUM = c(1:3))
DF <- lapply(1:3, function(i) DF[[i]] <- lapply(2014:2016, 
                                                function(t) DF[with(DF, YEAR == t), ]))

#I WOULD LIKE TO SIMPLIFY THIS PART AS MUCH AS POSSIBLE
DF[[1]][[1]] <- DF[[1]][[1]][with(DF[[1]][[1]], NUM == 1), ]
DF[[1]][[2]] <- DF[[1]][[2]][with(DF[[1]][[2]], NUM == 1), ]
DF[[1]][[3]] <- DF[[1]][[3]][with(DF[[1]][[3]], NUM == 1), ]

DF[[2]][[1]] <- DF[[2]][[1]][with(DF[[2]][[1]], NUM == 2), ]
DF[[2]][[2]] <- DF[[2]][[2]][with(DF[[2]][[2]], NUM == 2), ]
DF[[2]][[3]] <- DF[[2]][[3]][with(DF[[2]][[3]], NUM == 2), ]

DF[[3]][[1]] <- DF[[3]][[1]][with(DF[[3]][[1]], NUM == 3), ]
DF[[3]][[2]] <- DF[[3]][[2]][with(DF[[3]][[2]], NUM == 3), ]
DF[[3]][[3]] <- DF[[3]][[3]][with(DF[[3]][[3]], NUM == 3), ]

【问题讨论】:

    标签: r list nested subset


    【解决方案1】:

    您可以使用Map 将谓词值绑定到每个数据帧列表,然后遍历内部列表并执行子集:

    values = c(1,2,3)
    
    Map(function(dfs, val) lapply(dfs, function(df) subset(df, NUM == val)), DF, values)
    
    #[[1]]
    #[[1]][[1]]
    #   NAME YEAR NUM
    #1 FRANK 2014   1
    #2  TONY 2014   1
    #3    ED 2014   1
    
    #[[1]][[2]]
    #   NAME YEAR NUM
    #4 FRANK 2015   1
    #5  TONY 2015   1
    #6    ED 2015   1
    
    #[[1]][[3]]
    #   NAME YEAR NUM
    #7 FRANK 2016   1
    #8  TONY 2016   1
    #9    ED 2016   1
    
    
    #[[2]]
    #[[2]][[1]]
    #    NAME YEAR NUM
    #10 FRANK 2014   2
    #11  TONY 2014   2
    #12    ED 2014   2
    
    # ...
    

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2021-08-02
      • 1970-01-01
      • 2020-11-24
      • 2022-01-18
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      相关资源
      最近更新 更多