2

我有一个包含不同长度的不同时间序列的数据帧列表。我想总结一个变量的计数,然后通过该特定数据集中包含的数据年数对其进行标准化。

所以使用示例数据框:

data_list <- list(data.frame(temp_bin = rep(1:4, 2:5), value = runif(14)),
  data.frame(temp_bin = rep(1:4, 3:6), value = runif(18)), 
  data.frame(temp_bin = rep(1:4, 4:7), value = runif(22)))
# this might be ~10 different data sets with ~ 100k observations each

count <- lapply(data_list, function(x) {nrow(x)/5} )
#  for real data this would be divided by 8760 for the # of hours in a year.

这大约是我想要做的,但是 n()/count 不起作用,因为 count 是一个列表。

data_bin <- data_list %>%
  lapply(., group_by, temp_bin) %>%
  lapply(., summarise, n = n()/count)

我尝试在 n 的定义内进行 lapply 或 mapply,但这似乎不起作用。还尝试分两步进行 - 创建获取原始 n 值,然后在下一步中使用 mapply 进行划分,但这也不起作用。

4

2 回答 2

2

如果您将count步骤放在您的data_bin步骤中,我认为它可以完成您想要的,尽管我对您的意思有点模糊,但我认为这有效:(请注意,您可以.从 的第一个参数中删除分配lapply,这是默认值的行为%>%

data_bin <- data_list %>%
 lapply(group_by, temp_bin) %>%
 # We need x so I put summarize in a manual function
 lapply(function(x){summarize(x,n = 5*n()/nrow(x))}) # move the 5 to numerator

data_bin[[1]]
Source: local data frame [4 x 2]

  temp_bin         n
1        1 0.7142857
2        2 1.0714286
3        3 1.4285714
4        4 1.7857143

这是你想要的吗?nrow(x)您可以通过仅返回结果来仔细检查总结部分是否正在执行您想要的操作。

data_bin <- data_list %>%
 lapply(group_by, temp_bin) %>%
 lapply(function(x){summarize(x,n = nrow(x))}) 

data_bin[[1]]
Source: local data frame [4 x 2]

temp_bin  n
1        1 14
2        2 14
3        3 14
4        4 14
于 2015-05-21T20:03:02.850 回答
1

我会尽量避免在语句lapply的每一行上使用。dplyr您可以将单个data.frame转换包装在一个函数中,然后lapply将该函数包装到data_list

library(dplyr)

ret_db <- function(df) {
  db <- df %>%
    group_by(.,temp_bin) %>%
    summarise(.,n=n()/(nrow(df)/5))
  return(db)
}

data_bin <- lapply(data_list,ret_db)
于 2015-05-21T20:12:14.650 回答