【问题标题】:apply function for a list of data frames数据框列表的应用函数
【发布时间】:2017-12-17 00:14:08
【问题描述】:

我编写了一个函数,将我的数据框拆分为 7 个不同的数据框。到目前为止一切正常。但我正在尝试将此功能应用于数据框列表

这是我制作的清单:

m  =list(X2016_kvish_1_10t, X2015_kvish_1_10t, X2014_kvish_1_10t,
         X2013_kvish_1_10t, X2012_kvish_1_10t, X2011_kvish_1_10t,
         X2010_kvish_1_10t, X2009_kvish_1_10t, X2008_kvish_1_10t,
         X2007_kvish_1_10t, X2006_kvish_1_10t, X2005_kvish_1_10t)

这是第一个数据帧(单个数据帧)的函数:

 y = c(X2016_kvish_1_10t$nefah) # add the average traffic volume values per each day in the week (1-7)
n = 24
my.split <- function(y, n) split(y, sort(rep(letters[1:n], each=n, len=length(y)))) #function to split the Traffic volume values to 7 groups 
splitted_values = my.split(y, n)
mean_values.1_10t_2016 = lapply(splitted_values, mean) # Find the average traffic volume values for each day
mean_values.1_10t_2016 = rep(mean_values.1_10t_2016, each = 24) # Multiply the number of times the traffic volume values are displayed to fit the table

到目前为止,它工作正常。但我需要将此功能应用于所有 12 个数据帧 所以不要将 y 定义为:

y = c(X2016_kvish_1_10t$nefah) 

我想将 y 定义为:

y = c(m$nefah) # same column in each dataframe 

但是当我这样做时它不起作用。请帮帮我

数据框如下所示:

> X2016_kvish_1_10t
kvish keta maslul yom nefah status                date
1       1   10      1   1  1710     NA 2016-09-11 00:00:00
2       1   10      1   1   934     NA 2016-09-11 01:00:00
3       1   10      1   1   800     NA 2016-09-11 02:00:00
4       1   10      1   1   637     NA 2016-09-11 03:00:00
5       1   10      1   1   588     NA 2016-09-11 04:00:00
6       1   10      1   1   951     NA 2016-09-11 05:00:00
7       1   10      1   1  2312     NA 2016-09-11 06:00:00
8       1   10      1   1  3769     NA 2016-09-11 07:00:00
9       1   10      1   1  3348     NA 2016-09-11 08:00:00
#168 rows in total

m的结构:

> str(m)
List of 12
$ :'data.frame':    168 obs. of  7 variables:
$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : int [1:168] 1710 934 800 637 588 951 2312 3769 3348 2788 ...
..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
..$ date  : POSIXct[1:168], format: "2016-09-11 00:00:00" "2016-09-11 01:00:00" "2016-09-11 02:00:00" "2016-09-11 03:00:00" ...
$ :'data.frame':    168 obs. of  7 variables:
$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
 ..$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
 ..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
 ..$ yom   : int [1:168] 2 2 2 2 2 2 2 2 2 2 ...
 ..$ nefah : int [1:168] 1346 788 626 652 597 798 2344 3617 3669 2873 ...
 ..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
 ..$ date  : POSIXct[1:168], format: "2015-06-15 00:00:00" "2015-06-15 01:00:00" "2015-06-15 02:00:00" "2015-06-15 03:00:00" ...
 $ :'data.frame':   168 obs. of  7 variables:
 ..$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
 ..$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
 ..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
 ..$ yom   : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
 ..$ nefah : int [1:168] 1936 966 737 596 479 765 2082 3624 3847 2960 ...
 ..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
 ..$ date  : POSIXct[1:168], format: "2014-09-07 00:00:00" "2014-09-07 01:00:00" "2014-09-07 02:00:00" "2014-09-07 03:00:00" ...
  $ :'data.frame':  168 obs. of  7 variables:
..$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : int [1:168] 2066 1242 875 667 676 976 2630 4337 4282 3437 ...
..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
..$ date  : POSIXct[1:168], format: "2013-05-19 00:00:00" "2013-05-19 01:00:00" "2013-05-19 02:00:00" "2013-05-19 03:00:00" ...
 $ :'data.frame':   0 obs. of  7 variables:
..$ kvish : int(0) 
..$ keta  : int(0) 
..$ maslul: int(0) 
..$ yom   : int(0) 
..$ nefah : int(0) 
..$ status: int(0) 
..$ date  :Classes 'POSIXct', 'POSIXt'  atomic (0) 
..- attr(*, "tzone")= chr "UTC"
$ :'data.frame':    168 obs. of  7 variables:
..$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : int [1:168] 1454 1039 700 623 459 681 1971 3369 3513 2641 ...
..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
..$ date  : POSIXct[1:168], format: "2011-05-15 00:00:00" "2011-05-15 01:00:00" "2011-05-15 02:00:00" "2011-05-15 03:00:00" ...
$ :'data.frame':    168 obs. of  7 variables:
..$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : int [1:168] 1405 760 471 527 637 1278 4781 5902 5462 5297 ...
..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
..$ date  : POSIXct[1:168], format: "2010-05-09 00:00:00" "2010-05-09 01:00:00" "2010-05-09 02:00:00" "2010-05-09 03:00:00" ...
$ :'data.frame':    168 obs. of  7 variables:
..$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : int [1:168] 2123 1479 1327 946 743 966 2419 3893 3650 3300 ...
..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
..$ date  : POSIXct[1:168], format: "2009-10-11 00:00:00" "2009-10-11 01:00:00" "2009-10-11 02:00:00" "2009-10-11 03:00:00" ...
$ :'data.frame':    168 obs. of  7 variables:
..$ kvish : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ keta  : int [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : int [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : int [1:168] 2233 1439 1042 918 763 1024 2621 4348 4435 3742 ...
..$ status: int [1:168] NA NA NA NA NA NA NA NA NA NA ...
..$ date  : POSIXct[1:168], format: "2008-05-04 00:00:00" "2008-05-04 01:00:00" "2008-05-04 02:00:00" "2008-05-04 03:00:00" ...
$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':    168 obs. of  7   variables:
..$ kvish : atomic [1:168] 1 1 1 1 1 1 1 1 1 1 ...
.. ..- attr(*, "label")= chr "kvish"
..$ keta  : atomic [1:168] 10 10 10 10 10 10 10 10 10 10 ...
.. ..- attr(*, "label")= chr "keta"
..$ maslul: atomic [1:168] 1 1 1 1 1 1 1 1 1 1 ...
.. ..- attr(*, "label")= chr "maslul"
..$ yom   : atomic [1:168] 1 1 1 1 1 1 1 1 1 1 ...
.. ..- attr(*, "label")= chr "yom"
..$ nefah : atomic [1:168] 1791 1130 785 717 571 ...
.. ..- attr(*, "label")= chr "nefah"
..$ status: atomic [1:168] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "status"
..$ date  : POSIXct[1:168], format: "2007-01-21 00:00:00" "2007-01-21 01:00:00" "2007-01-21 02:00:00" "2007-01-21 03:00:00" ...
$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':    168 obs. of  6 variables:
..$ kvish : num [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ keta  : num [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: num [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : num [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : num [1:168] 2408 1539 1114 990 851 ...
..$ date  : POSIXct[1:168], format: "2006-09-03 00:00:00" "2006-09-03 01:00:00" "2006-09-03 02:00:00" "2006-09-03 03:00:00" ...
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   168 obs. of  6 variables:
..$ kvish : num [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ keta  : num [1:168] 10 10 10 10 10 10 10 10 10 10 ...
..$ maslul: num [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ yom   : num [1:168] 1 1 1 1 1 1 1 1 1 1 ...
..$ nefah : num [1:168] 2743 1759 1227 1077 1019 ...
..$ date  : POSIXct[1:168], format: "2005-05-01 00:00:00" "2005-05-01 01:00:00" "2005-05-01 02:00:00" "2005-05-01 03:00:00" ...

【问题讨论】:

  • 我真的很难理解你想做什么...m 是一个字符列表。如果您想将 y 设置为 m$nefah 而 nefah 将是列名,m 应该是数据框。拆分列表没有意义...您要拆分的数据框在哪里?
  • 我将 m 定义为所有数据框列表。每个数据框都有“nefah”列,对于每个数据框,我想将其拆分为 7 个不同的部分,就像我在示例中所做的那样

标签: r list function dataframe lapply


【解决方案1】:

请检查它是否有点接近你想要的......

n = 24
my.split <- function(y, n) split(y, sort(rep(letters[1:n], each=n, len=length(y)))) #function to split the Traffic volume values to 7 groups 
splitted_values = lapply(m, function(x) my.split(x$nefah, n))
mean_values <- lapply(splitted_values, function(x) lapply(x, mean)) # Find the average traffic volume values for each day
mean_values <- lapply(mean_values, unlist) 
mean_values = lapply(mean_values, function(x) rep(x, each = 24))

【讨论】:

  • 我试过了,它显示了这个错误:x$nefah 中的错误:$ 运算符对原子向量无效
  • 由于我将my.split 应用于列表的元素,并且它从每个元素中获取nefah 列,因此错误是说列表的元素不是真正的数据框而是向量.请提供您的m 列表样本,以及其中至少两个数据框的head。
  • 我的列表元素都是data.frame类型。我检查了。
  • 您能否至少提供列表中str 的结果?
  • 我列出了三个mtcars 数据帧,我可以毫无问题地将代码运行到第三行,在这里工作。
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 2020-04-24
  • 2017-04-22
  • 1970-01-01
  • 2015-04-19
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多