2017-07-02 114 views
0

使用R基地,我想子集嵌套列表,其中每個列表元素的子集條件更改。下面是一個例子。謝謝。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), ] 

回答

2

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

# ...