我试图通过创建五列(名称,特定名称的总数,均值,SD和范围)在R中为特定数据集创建一个表。
我已经有一个数据集(大小),其列为:名称,高度(H)和重量(W),并且我想使用带有列的大小数据创建一个表,列为:名称,特定项的总数名称,H的平均值,H的SD和H的范围,W的平均值,W的SD和W的范围。但是,我很难按名称提取数据。有什么建议吗?
example of dataframe (sizes) desired table
这可能是一个菜鸟问题,但这恰恰是我在R世界中所要解决的问题,因此任何帮助都会很棒!
答案 0 :(得分:1)
我认为下面的示例会有所帮助:
library(dplyr)
data<-iris
data %>% group_by(Species) %>% summarise(Count= n(),Mean=mean(data$Sepal.Width),SD=sd(data$Sepal.Width))
您将在其中按名称将列分组的地方
答案 1 :(得分:0)
以下内容可满足您的需求。我使用了内置数据集iris
,选择了一个name
列和两个数字列。
主要功能是aggregate
。您应该浏览其帮助页面。在R命令提示符下,运行?aggregate
。
sizes <- iris[5:3]
names(sizes) <- c("name", "height", "weight")
head(sizes)
stats <- function(x){
c(Sum = sum(x), Mean = mean(x), SD = sd(x), Range = range(x))
}
agg <- aggregate(. ~ name, data = sizes, stats)
colnames(agg$height) <- paste("height", colnames(agg$height), sep = ".")
colnames(agg$height) <- sub("Range1", "Min", colnames(agg$height))
colnames(agg$height) <- sub("Range2", "Max", colnames(agg$height))
colnames(agg$weight) <- paste("weight", colnames(agg$weight), sep = ".")
colnames(agg$weight) <- sub("Range1", "Min", colnames(agg$weight))
colnames(agg$weight) <- sub("Range2", "Max", colnames(agg$weight))
agg <- cbind(agg[1], agg$height, agg$weight)
agg