使用 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] 删除。
我来说两句