R:从列表中的数据帧创建特定单元格的向量和某些列的平均值

标签 r list loops

抱歉,这可能是一个基本/多余的问题(标题很糟糕)。我一直在努力计算列表中数据框中的列的平均值。我尝试过类似问题中提到的各种方法,但永远无法使其发挥作用。我对 r 比较陌生,有点超出了我的能力范围。

我有一个类似于以下内容的数据框列表:

df1 <- data.frame(c("Jan", "Jan", "Jan"), c("21:14:33", "21:14:33", "21:14:33"), c(1, 2, 3), c(11, 12, 13))
df2 <- data.frame(c("Feb", "Feb", "Feb"), c("22:14:33", "22:14:33", "22:14:33"), c(2, 3, 4), c(12, 13, 14))
df3 <- data.frame(c("Mar", "Mar", "Mar"), c("23:14:33", "23:14:33", "23:14:33"), c(3, 4, 5), c(13, 14, 15))
mylist <- list(df1, df2, df3)

我的目标是为每个包含月份、时间、mean.column3、mean.column4 的数据帧创建一个向量。例如,第一个数据帧为“Jan, 21:14:33, 2, 12”。 (最终我想将所有这些向量合并到一个新的数据框中,但是一旦我使用 rbind 获得了向量,我就可以做到这一点)。

我已经使用for循环计算平均值,但使用下面的代码它只给出了最后一个数据帧(df3)的平均值:

for(i in seq_along(mylist)){
output <- sapply(mylist[[i]][3:4], MARGIN = 2, FUN = mean)
}

我还尝试过使用 lapply (如建议的 here )、abind (如建议的 here )和 map (如建议的 here ),这让我认为我是问题所在,并且必须缺少一些东西.

这些方法都没有开始解决在结果向量中包含月份和时间的需要。我尝试使用这样的代码对单个数据框执行此操作,但它为我提供了所有月份和时间,而我实际上只需要它们一次。

output1 <- c(mylist[[1]][1,1:2],sapply(mylist[[1]][3:4], MARGIN = 2, FUN = mean))

帮忙?

最佳答案

我认为您计算平均值然后合并到一个数据框中的计划是倒退的 - 您的数据框都具有相同的列,因此请继续将它们合并!然后进行分组均值就很容易了。

我将在这里使用data.table,因为它具有很好的分组方式语法,并且它的rbindlist将忽略示例中不同的(可怕的)列名称:

library(data.table)
mydt = rbindlist(mylist)

# get better column names
setnames(mydt, c("month", "time", "x1", "x2"))

# means by group
mydt[, .(mx1 = mean(x1), mx2 = mean(x2)), by = .(month, time)]
#    month     time mx1 mx2
# 1:   Jan 21:14:33   2  12
# 2:   Feb 22:14:33   3  13
# 3:   Mar 23:14:33   4  14

# (if you have more columns and you don't want to type out all the means)
mydt[, lapply(.SD, mean), by = .(month, time)]

关于R:从列表中的数据帧创建特定单元格的向量和某些列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982410/

相关文章:

r - 使用 x/y 之外的美学时出现 ggmap 错误

r - 如何使用 ddply 进行过滤

r - 从字符串中提取匹配模式

linux - 如何使用 shell 在 linux 中逐一打印具有完整信息的所有用户列表

python - 有效地选择 numpy 数组的子部分

r - 如何将希腊字母 delta (∆) 插入到 flextable 对象的标题中?

php - 将列表从 php 或 xmlhttp.responseText 传递到 javascript

list - Haskell:在索引 k 处将列表拆分为 2

javascript - 列表迭代器中的无限循环

java - 如何在输出之前在 JSTL 循环内的对象上调用外部库函数?