在列表中的数据框架中执行基本计算(总数的百分比)的最佳方法是什么?

时间:2016-02-19 20:55:08

标签: r list dataframe plyr

考虑名为"Date" "Location" "V1" "V2"的数据框列表。每个数据帧都具有相同的列:

library(plyr)其中V1是一个用实数填充的列

我想计算每个日期/位置组合的说法总数的百分比。这是每个特定日期/位置对的所有数据帧的总和V1,然后计算每个V1观察值与相关样本的份额。

我尝试了什么:

我堆叠了数据帧,因为我不知道如何在没有循环数据帧/日期/位置组合的情况下进行扫描,这显然效率很低。

aggregate <- rbind.fill(listDF)

ptt <- ddply(aggregate,.(Date,Location),transform, share= V1/sum(V1))

prop.table

最后一行导致RStudio崩溃并要求我开始一个新会话。 FWIW,avg数据帧有50k行,列表总共有大约1M行。我应该使用{{1}}吗?

在一个理想的世界中,我会将百分比(ptt)作为每个数据帧中的一列,而不是单个堆叠的数据帧,我将不得不拆分。

*附带问题:有没有办法选择哪个列表元素子集用于任何给定的ptt?我假设在我最初的问题中使用了所有数据帧,但是很乐意根据V2的标准进行选择。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果列表中的每个数据帧具有相同的列,则使用具有指示原始数据帧的额外变量的单个数据帧将更容易。然后,您可以轻松执行按数据框分组的计算。

示例数据

# two data frames
d1 <- data.frame(x = rep(LETTERS[1:2], each = 5), y = rnorm(10))
d2 <- data.frame(x = rep(LETTERS[1:2], each = 7), y = rnorm(14))

# put data frames in a list
L <- list(d1, d2)

我们可以使用dplyr::bind_rows()L“取消列入”单个数据框。 .id选项指示bind_rows创建标识原始数据框的显式变量:

library(dplyr)
d <- bind_rows(L, .id = "dat")

现在,您可以按照您创建的变量进行任何汇总:

d %>%
  group_by(dat) %>%
  summarise(mean_y = mean(y))