如何一次在数据框列上应用不同的函数

时间:2018-03-04 16:48:22

标签: r function dataframe

我想将不同的函数应用于数据框的列。目前,我正在逐一进行。作为一个例子,我已经提出了一些可重现的代码。

col1_mean <- mean(iris$Sepal.Length)
col2_mean <- mean(iris$Sepal.Width)
.
.    

col1_median <- median(iris$Sepal.Length)
col2_median <- median(iris$Sepal.Width)
.
.

col1_sd <- sd(iris$Sepal.Length)
col2_sd <- sd(iris$Sepal.Width)
.
.

我如何一步到位或一次完成。?

2 个答案:

答案 0 :(得分:1)

我们可以做类似

的事情
multiple_funs <- function(x){
  c(mean = mean(x), median = median(x), sd = sd(x))
}
sapply(iris[, -5], multiple_funs)

#           Sepal.Length Sepal.Width Petal.Length Petal.Width
# mean      5.8433333   3.0573333     3.758000   1.1993333
# median    5.8000000   3.0000000     4.350000   1.3000000
# sd        0.8280661   0.4358663     1.765298   0.7622377

plyr::each()

multiple_funs <- plyr::each(mean, median, sd)
sapply(iris[,-5], multiple_funs)


#           Sepal.Length Sepal.Width Petal.Length Petal.Width
# mean      5.8433333   3.0573333     3.758000   1.1993333
# median    5.8000000   3.0000000     4.350000   1.3000000
# sd        0.8280661   0.4358663     1.765298   0.7622377

答案 1 :(得分:1)

> A=aggregate(.~1,iris[-5],function(x){c(mean=mean(x),median=median(x),sd=sd(x))})
> `row.names<-`(do.call(rbind,A),names(iris[-5]))
                 mean median        sd
Sepal.Length 5.843333   5.80 0.8280661
Sepal.Width  3.057333   3.00 0.4358663
Petal.Length 3.758000   4.35 1.7652982
Petal.Width  1.199333   1.30 0.7622377