通过在R中子集一个数据帧列表来创建一个数据帧列表的列表 [英] Create a list of a list of dataframes, by subsetting a list of dataframes in R

查看:63
本文介绍了通过在R中子集一个数据帧列表来创建一个数据帧列表的列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个6个数据帧的列表,我想创建一个包含24个数据帧的6个列表的列表,这24个数据帧是原始6个数据帧的子集.

这是我要做的事的简短示例:

 月<-c(0:35)产品<-c(112:147)索引<-rnorm(36)df1<-data.frame(月,产品,索引)产品2<-c(212:247)索引2<-rnorm(36)df2<-data.frame(月,product2,index2)产品3<-c(312:347)索引3<-rnorm(36)df3<-data.frame(月,产品3,索引3)dflist<-list(df1,df2,df3)#创建子集函数subfun< -function(x,y,z){subset(x,y> = z& y< = z + 12)}#根据每个现有数据框创建一个包含24个新数据框的列表regdflist<-lapply(dflist,function(df){lapply(1:24,function(x)subfun(df,df [["months"]],x-1))df}) 

运行此命令时,它将创建一个新的列表regdflist,该列表与dflist相同,并且不会创建新的子集数据框.

我试图在lapply函数中使用lapply函数,以对数据进行子集化,并在原始列表中创建一个新列表.有可能吗?

有人能告诉我这里哪里出了问题吗?

这是我先前的问题,我仅将 subfun 函数应用于一个数据帧.我现在正在尝试针对多个数据框进行调整. R创建数据列表的新数据列表数据框但是我认为他的做法与我尝试过的类似,而且我无法使其正常工作.

非常感谢您的帮助

解决方案

  subfun<-function(x,y,z){x [x [[y]]> = z&x [[y]]< = z + 12,]}a_df_list<-lapply(dflist,function(i){lapply(1:24,function(j){subfun(x = i,y = 1,z = j-1)})})mapply(长度,a_df_list)[1] 24 24 24str(a_df_list [[1]])清单24$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 0 1 2 3 4 5 6 7 8 9 ..... $ product:int [1:13] 112113114115116117117118119120121 ..... $索引:num [1:13] -0.00928 -0.18127 -0.67568 0.31983 0.12634 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 1 2 3 4 5 6 7 8 9 10 ..... $ product:int [1:13] 113114115116117117118119120121122 ..... $索引:数字[1:13] -0.181 -0.676 0.32 0.126 0.523 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 2 3 4 5 6 7 8 9 10 11 ..... $ product:int [1:13] 114115116117117118119120121122123 ..... $索引:num [1:13] -0.6757 0.3198 0.1263 0.5232 -0.0099 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 3 4 5 6 7 8 9 10 11 12 ..... $ product:int [1:13] 115116117118119120121122123124 ..... $索引:num [1:13] 0.3198 0.1263 0.5232 -0.0099 -1.0777 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 4 5 6 7 8 9 10 11 12 13 ..... $产品:int [1:13] 116117118119120121122123124125 ..... $索引:num [1:13] 0.1263 0.5232 -0.0099 -1.0777 -0.7909 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 5 6 7 8 9 10 11 12 13 14 ..... $ product:int [1:13] 117 118 119 120 121 122 123 124 125 126 ..... $索引:num [1:13] 0.5232 -0.0099 -1.0777 -0.7909 1.4367 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 6 7 8 9 10 11 12 13 14 15 ..... $ product:int [1:13] 118119120121122123123124125126127 ..... $索引:num [1:13] -0.0099 -1.0777 -0.7909 1.4367 -1.1149 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 7 8 9 10 11 12 13 14 15 16 ..... $ product:int [1:13] 119120121122123123124125126127127 ..... $索引:num [1:13] -1.078 -0.791 1.437 -1.115 -0.671 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 8 9 10 11 12 13 14 15 16 17 ..... $ product:int [1:13] 120121122123124124125126127127129 ..... $索引:num [1:13] -0.791 1.437 -1.115 -0.671 -0.358 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 9 10 11 12 13 13 14 15 16 17 18 ..... $产品:int [1:13] 121122123124125126126127128129130 ..... $索引:num [1:13] 1.437 -1.115 -0.671 -0.358 -1.332 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 10 11 12 13 14 15 16 17 18 19 ..... $ product:int [1:13] 122123124125126126127128129130131 ..... $索引:num [1:13] -1.115 -0.671 -0.358 -1.332 0.622 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 11 12 13 14 15 16 17 18 19 20 ..... $ product:int [1:13] 123124125126126127128129130131132 ..... $索引:num [1:13] -0.671 -0.358 -1.332 0.622 -1.483 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 12 13 14 15 16 16 18 18 19 20 21 ..... $产品:int [1:13] 124125126127127128129130131132133 ..... $索引:num [1:13] -0.358 -1.332 0.622 -1.483 0.579 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 13 14 15 16 17 18 18 19 20 21 22 ..... $产品:int [1:13] 125126127127128129130131131132134134 ..... $索引:num [1:13] -1.332 0.622 -1.483 0.579 -2.161 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 14 15 16 17 18 18 19 20 21 22 23 ..... $ product:int [1:13] 126127128129130130131132132133134135 ..... $索引:num [1:13] 0.622 -1.483 0.579 -2.161 -0.544 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 15 16 17 18 18 19 20 21 22 23 24 ..... $产品:int [1:13] 127128129130131131132133133134136 ..... $索引:num [1:13] -1.483 0.579 -2.161 -0.544 -0.991 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 16 17 18 19 20 21 22 23 24 25 ..... $产品:int [1:13] 128129130131131132133134135136137 ..... $索引:num [1:13] 0.579 -2.161 -0.544 -0.991 0.351 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 17 18 19 20 21 22 23 24 25 26 ..... $产品:int [1:13] 129130131132132133134135136137138 ..... $索引:num [1:13] -2.161 -0.544 -0.991 0.351 0.801 ...$:'data.frame':13个观察点3个变量:.. $月:int [1:13] 18 19 20 21 22 23 24 25 26 27 ..... $产品:int [1:13] 130131132133133134135136137138139 ..... $索引:num [1:13] -0.544 -0.991 0.351 0.801 0.159 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 19 20 21 22 23 23 24 25 26 27 28 ..... $产品:int [1:13] 131 132 133 134 135 136 136 137 138 139 140 ..... $索引:数字[1:13] -0.991 0.351 0.801 0.159 -0.479 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 20 21 22 23 24 25 26 27 28 29 ..... $ product:int [1:13] 132133134134135136137137138139140141 ..... $索引:数字[1:13] 0.351 0.801 0.159 -0.479 -0.581 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 21 22 23 24 25 26 27 28 29 30 ..... $产品:int [1:13] 133134134135136137138138139140141142 ..... $指数:数值[1:13] 0.801 0.159 -0.479 -0.581 0.276 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 22 23 24 25 26 27 28 29 30 31 ..... $ product:int [1:13] 134135136137137138139140141142143 ..... $指数:数值[1:13] 0.159 -0.479 -0.581 0.276 -1.346 ...$:'data.frame':13个观察点3个变量:.. $ months:int [1:13] 23 24 25 26 27 28 29 30 31 32 ..... $ product:int [1:13] 135136137137138139140141141142143144 ..... $索引:num [1:13] -0.479 -0.581 0.276 -1.346 -0.861 ... 

I have a list of 6 dataframes, and I would like to create a list of 6 lists of 24 dataframes, the 24 dataframes being subsets of the original 6 dataframes.

Here is a shorter example of what I'm trying to do:

months <- c(0:35)
product<- c(112:147)
index <- rnorm(36)
df1 <- data.frame(months, product, index)

product2<- c(212:247)
index2 <- rnorm(36)
df2 <- data.frame(months, product2, index2)

product3<- c(312:347)
index3 <- rnorm(36)
df3 <- data.frame(months, product3, index3)

dflist <- list(df1, df2, df3)

#Creating the subset function
subfun<-function(x,y,z) {  subset(x,y>=z & y<=z+12) }

#Creating a list of 24 new dataframes from each existing dataframe
regdflist <- lapply(dflist, function(df) { lapply(1:24, function(x) subfun (df, df[["months"]], x-1)) df }) 

When I run this, it creates a new list regdflist, which is identical to dflist, and doesn't create the new subset dataframes.

I am trying to use an lapply function within an lapply function, to subset the data, and create a new list within the original list. Is that possible?

Is anyone able to advise where I've gone wrong here?

This is my earlier question, where I applied the subfun function to only one dataframe. I'm now trying to adapt this for multiple dataframes. Making a list of dataframes which are a subset of one dataframe using R

I have also seen this answer: R create new list of dataframes of a list of dataframes But I think what he's doing is similar to what I've tried to do, and I can't make it work.

Thanks very much for your help

解决方案

subfun <- function(x,y,z) {  
    x[x[[y]] >= z & x[[y]] <= z+12,]
}

a_df_list <- lapply(dflist, function(i){
    lapply(1:24, function(j){
        subfun(x = i, y = 1, z = j - 1)
    })
})

mapply(length, a_df_list)

[1] 24 24 24

str(a_df_list[[1]])

List of 24
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 0 1 2 3 4 5 6 7 8 9 ...
  ..$ product: int [1:13] 112 113 114 115 116 117 118 119 120 121 ...
  ..$ index  : num [1:13] -0.00928 -0.18127 -0.67568 0.31983 0.12634 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ product: int [1:13] 113 114 115 116 117 118 119 120 121 122 ...
  ..$ index  : num [1:13] -0.181 -0.676 0.32 0.126 0.523 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 2 3 4 5 6 7 8 9 10 11 ...
  ..$ product: int [1:13] 114 115 116 117 118 119 120 121 122 123 ...
  ..$ index  : num [1:13] -0.6757 0.3198 0.1263 0.5232 -0.0099 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 3 4 5 6 7 8 9 10 11 12 ...
  ..$ product: int [1:13] 115 116 117 118 119 120 121 122 123 124 ...
  ..$ index  : num [1:13] 0.3198 0.1263 0.5232 -0.0099 -1.0777 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 4 5 6 7 8 9 10 11 12 13 ...
  ..$ product: int [1:13] 116 117 118 119 120 121 122 123 124 125 ...
  ..$ index  : num [1:13] 0.1263 0.5232 -0.0099 -1.0777 -0.7909 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 5 6 7 8 9 10 11 12 13 14 ...
  ..$ product: int [1:13] 117 118 119 120 121 122 123 124 125 126 ...
  ..$ index  : num [1:13] 0.5232 -0.0099 -1.0777 -0.7909 1.4367 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 6 7 8 9 10 11 12 13 14 15 ...
  ..$ product: int [1:13] 118 119 120 121 122 123 124 125 126 127 ...
  ..$ index  : num [1:13] -0.0099 -1.0777 -0.7909 1.4367 -1.1149 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 7 8 9 10 11 12 13 14 15 16 ...
  ..$ product: int [1:13] 119 120 121 122 123 124 125 126 127 128 ...
  ..$ index  : num [1:13] -1.078 -0.791 1.437 -1.115 -0.671 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 8 9 10 11 12 13 14 15 16 17 ...
  ..$ product: int [1:13] 120 121 122 123 124 125 126 127 128 129 ...
  ..$ index  : num [1:13] -0.791 1.437 -1.115 -0.671 -0.358 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 9 10 11 12 13 14 15 16 17 18 ...
  ..$ product: int [1:13] 121 122 123 124 125 126 127 128 129 130 ...
  ..$ index  : num [1:13] 1.437 -1.115 -0.671 -0.358 -1.332 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 10 11 12 13 14 15 16 17 18 19 ...
  ..$ product: int [1:13] 122 123 124 125 126 127 128 129 130 131 ...
  ..$ index  : num [1:13] -1.115 -0.671 -0.358 -1.332 0.622 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 11 12 13 14 15 16 17 18 19 20 ...
  ..$ product: int [1:13] 123 124 125 126 127 128 129 130 131 132 ...
  ..$ index  : num [1:13] -0.671 -0.358 -1.332 0.622 -1.483 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 12 13 14 15 16 17 18 19 20 21 ...
  ..$ product: int [1:13] 124 125 126 127 128 129 130 131 132 133 ...
  ..$ index  : num [1:13] -0.358 -1.332 0.622 -1.483 0.579 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 13 14 15 16 17 18 19 20 21 22 ...
  ..$ product: int [1:13] 125 126 127 128 129 130 131 132 133 134 ...
  ..$ index  : num [1:13] -1.332 0.622 -1.483 0.579 -2.161 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 14 15 16 17 18 19 20 21 22 23 ...
  ..$ product: int [1:13] 126 127 128 129 130 131 132 133 134 135 ...
  ..$ index  : num [1:13] 0.622 -1.483 0.579 -2.161 -0.544 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 15 16 17 18 19 20 21 22 23 24 ...
  ..$ product: int [1:13] 127 128 129 130 131 132 133 134 135 136 ...
  ..$ index  : num [1:13] -1.483 0.579 -2.161 -0.544 -0.991 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 16 17 18 19 20 21 22 23 24 25 ...
  ..$ product: int [1:13] 128 129 130 131 132 133 134 135 136 137 ...
  ..$ index  : num [1:13] 0.579 -2.161 -0.544 -0.991 0.351 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 17 18 19 20 21 22 23 24 25 26 ...
  ..$ product: int [1:13] 129 130 131 132 133 134 135 136 137 138 ...
  ..$ index  : num [1:13] -2.161 -0.544 -0.991 0.351 0.801 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 18 19 20 21 22 23 24 25 26 27 ...
  ..$ product: int [1:13] 130 131 132 133 134 135 136 137 138 139 ...
  ..$ index  : num [1:13] -0.544 -0.991 0.351 0.801 0.159 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 19 20 21 22 23 24 25 26 27 28 ...
  ..$ product: int [1:13] 131 132 133 134 135 136 137 138 139 140 ...
  ..$ index  : num [1:13] -0.991 0.351 0.801 0.159 -0.479 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 20 21 22 23 24 25 26 27 28 29 ...
  ..$ product: int [1:13] 132 133 134 135 136 137 138 139 140 141 ...
  ..$ index  : num [1:13] 0.351 0.801 0.159 -0.479 -0.581 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 21 22 23 24 25 26 27 28 29 30 ...
  ..$ product: int [1:13] 133 134 135 136 137 138 139 140 141 142 ...
  ..$ index  : num [1:13] 0.801 0.159 -0.479 -0.581 0.276 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 22 23 24 25 26 27 28 29 30 31 ...
  ..$ product: int [1:13] 134 135 136 137 138 139 140 141 142 143 ...
  ..$ index  : num [1:13] 0.159 -0.479 -0.581 0.276 -1.346 ...
 $ :'data.frame':   13 obs. of  3 variables:
  ..$ months : int [1:13] 23 24 25 26 27 28 29 30 31 32 ...
  ..$ product: int [1:13] 135 136 137 138 139 140 141 142 143 144 ...
  ..$ index  : num [1:13] -0.479 -0.581 0.276 -1.346 -0.861 ...

这篇关于通过在R中子集一个数据帧列表来创建一个数据帧列表的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆