R 子集嵌套列表

用户1491868

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

#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), ]
西多姆

您可以使用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

# ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章