这是一个基本问题,但我尚未开始工作。我想计算我的数据帧中相同变量(同时)的平均值,标准差。我使用了函数aggregate()但这需要指定组,在这种情况下我不想要。
数据集如下:
id v1 v2 v3 v4
1 23 34 12 10
2 10 12 39 14
谢谢。
答案 0 :(得分:0)
假设您希望列mean
为sd
,v1:v4
。
使用base R
f1 <- function(x,...){c(mean(x,...), sd(x))}
apply(df[,-1],2, f1, na.rm=TRUE)
# v1 v2 v3 v4
#[1,] 16.500000 23.00000 25.50000 12.000000
#[2,] 9.192388 15.55635 19.09188 2.828427
sapply(df[,-1],f1)
# v1 v2 v3 v4
#[1,] 16.500000 23.00000 25.50000 12.000000
#[2,] 9.192388 15.55635 19.09188 2.828427
aggregate(.~1, df[,-1], f1, na.rm=TRUE, na.action=NULL)
# v1.1 v1.2 v2.1 v2.2 v3.1 v3.2 v4.1 v4.2
#1 16.500000 9.192388 23.00000 15.55635 25.50000 19.09188 12.000000 2.828427
或者
library(dplyr)
summarise_each(df,funs(mean=mean(., na.rm=TRUE), sd), starts_with("v"))
# v1_mean v2_mean v3_mean v4_mean v1_sd v2_sd v3_sd v4_sd
#1 16.5 23 25.5 12 9.192388 15.55635 19.09188 2.828427
或使用data.table
library(data.table)
setDT(df)[,lapply(.SD, function(x) c(mean(x, na.rm=TRUE), sd(x))),
.SDcols=paste0('v', 1:4)]
# v1 v2 v3 v4
#1: 16.500000 23.00000 25.50000 12.000000
#2: 9.192388 15.55635 19.09188 2.828427
df <- structure(list(id = 1:2, v1 = c(23L, 10L), v2 = c(34L, 12L),
v3 = c(12L, 39L), v4 = c(10L, 14L)), .Names = c("id", "v1",
"v2", "v3", "v4"), class = "data.frame", row.names = c(NA, -2L))