【问题标题】:Calculate means for multiple variables in with different sizes计算不同大小的多个变量的均值
【发布时间】:2016-09-13 05:54:17
【问题描述】:

我有表格,代码如下:

data <- data.frame(Subject = c(0,0,0,1,2,2),
                   Class = c("Apple","Apple","Apple","Orange","Orange","Orange"),
                   name = c(1,1,1,0,1,1),
                   name1 = c(0,1,1,1,1,1),
                   name2 = c(1,1,1,0,0,1))

我想找到每个班级和每个科目的每个变量的平均值,并将其列为表格。例如,该表将首先具有主题的平均值; 0 表示平均 8/9,2 表示平均 5/6。其次计算班级平均值;橙色,平均 2/3。最后分解 name、name1 和 name2 的平均值。

我已经尝试了下面的代码,首先将标题存储为列表,然后使用 lapply 按主题和类别对其进行排序。但它不起作用。

cols = c(head(data))
data[,lapply(.SD[,cols,with=FALSE],mean),by=Class|Subject]

【问题讨论】:

  • 可能是setDT(data)[, lapply(.SD, mean), by = .(Class, Subject)]?阅读data.table 语法可能是个好主意。请参阅"Getting started" wiki
  • 列名不在头部;使用names(data)

标签: r data.table mean


【解决方案1】:
library(reshape2)
library(dplyr)

data2 <- melt(data, c("Subject", "Class"))

data.frame(summarize(group_by(data2, Subject, Class),
                      avg_val = mean(value))) -> table_for_you

【讨论】:

  • 我认为这张桌子正是我要找的,感谢您的快速回复。还有一个问题,如果我有很多变量,我可以使用 mean(names(data)) 来计算每个变量的平均值吗?而不是列出每一个。
  • data2
  • 这将适用于无限数量的变量,但是您必须列出要排除的变量(即名称、名称1、名称2)。
  • 我认为更直接的 dplyr 解决方案是data %&gt;% group_by(Subject,Class) %&gt;% summarize_all(.,funs(mean))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多