【问题标题】:How to calculate mean value of all columns of datarame [duplicate]如何计算数据框所有列的平均值[重复]
【发布时间】:2022-02-21 04:22:39
【问题描述】:

我有一个数据框,我想计算所有列的平均值并将其保存到一个新的数据框中。我找到了这个解决方案calculate the mean for each column of a matrix in R 但是,这仅适用于矩阵而不是数据框

structure(list(TotFlArea = c(1232, 596, 708, 1052, 716), logg_weighted_assess = c(13.7765298160156, 
13.1822275291412, 13.328376420438, 13.3076293132057, 13.5164823091252
), TypeDwel1.2.Duplex = c(0, 0, 0, 0, 0), TypeDwelApartment.Condo = c(0, 
1, 1, 1, 1), TypeDwelTownhouse = c(1, 0, 0, 0, 0), Age_new.70 = c(0, 
0, 0, 0, 0), Age_new0.1 = c(0, 0, 0, 0, 0), Age_new16.40 = c(1, 
1, 0, 1, 0), Age_new2.5 = c(0, 0, 0, 0, 0), Age_new41.70 = c(0, 
0, 0, 0, 0), Age_new6.15 = c(0, 0, 1, 0, 1), LandFreehold = c(1, 
1, 1, 0, 1), LandLeasehold.prepaid = c(0, 0, 0, 1, 0), LandOthers = c(0, 
0, 0, 0, 0), cluster_K_mean.1 = c(0, 0, 0, 0, 0)), row.names = c("1", 
"2", "3", "4", "5"), class = "data.frame")

你能告诉我怎么做吗?

注意:我的数据框可以有 NA 值,应该从平均值计算中排除

【问题讨论】:

  • 您可以使用colMeans,它适用于data.frame/matrix,即colMeans(yourdata, na.rm = TRUE)(假设所有列都是数字)
  • colMeans(yourdata, na.rm = TRUE)

标签: r dataframe mean


【解决方案1】:

正如@akrun 指出的那样。也是另一种选择

apply(df, 2, mean)

其中2 表示按列,1 表示按行。

但是,除了它的灵活性(例如从平均值更改为模式或仅应用于选定的列apply(df[,c('a', 'b')], 2, mean))之外,下面还显示了使用apply 的缺点(在速度方面)

library(data.table)
library(microbenchmark)

# dummy data
x <- 1e7
df <- data.table(a = 1:x )
y <- letters[2:10]
df[, (y) := lapply(2:10, \(i) a+i)]

# benchmark
z <- 
microbenchmark(colMeans = {colMeans(df)}
               , apply = {apply(df, 2, mean)}
               , times = 30
               )

plot(z)

【讨论】:

  • 如果您要提供另一种选择,您应该添加一些评论,说明何时更喜欢其中一种。
  • 谢谢,@GregorThomas。 1 使用apply 的优点将是在需要更改功能的情况下的灵活性。另一方面,我确实承认它的速度低于colMeans
  • 太棒了 - 稍加评论就能更好地回答。
猜你喜欢
  • 2011-05-29
  • 2019-10-25
  • 1970-01-01
  • 2020-02-29
  • 2020-03-03
  • 2017-09-24
  • 2017-04-18
  • 2016-03-03
相关资源
最近更新 更多