R中的均值(data.frame)已不存在,有哪些替代方案?

时间:2016-04-04 12:35:08

标签: r mean

我是使用R的新手,我从我的主管那里得到了这段代码:

for (i in 1:k) mean.mat[i, ] <- mean(data.frame[i])

但是,正如我发现的那样,数据帧的意思不再有效。所以我试着提出以下解决方案:

for (i in 1:k) mean.mat[i, ] <- lapply(norm.df[i], mean, na.rm = TRUE)

但是我收到以下错误消息:

Error in mean.mat[i, ] <- lapply(norm.df[i], mean, na.rm = TRUE) : incorrect number of subscripts on matrix

有人知道为什么这不起作用以及如何替换mean()函数?

2 个答案:

答案 0 :(得分:2)

OP的代码中需要修改几件事。

  1. for循环

    一个。 norm.df[i]mean一起使用不起作用,因为mean适用于vector而不是data.framenorm.df[i]使用data.frame,仍为vector,并且在其rhs上使用列索引会将其转换为mean

    湾所有列的vector都可以连接到vector。因此,如果我们初始化输出length,即{mean.norm',其中ncol等于'norm.df'的mean.norm <- numeric(ncol(norm.df)) ,则会更容易

    for(i in seq_len(ncol(norm.df))) {
         mean.norm[i] <- mean(norm.df[,i], na.rm=TRUE)
     }
    

    ℃。目前尚不清楚'k'是否定义。如果是,它不是

    mean.norm[i]

    请注意,使用的索引是mean.norm[i,]而不是matrix。对于后者,我们需要将'mean.norm'初始化为lapply一列。

  2. lapply

    使用lapply(norm.df, mean, na.rm=TRUE) 循环列不需要任何索引,除非我们循环遍历列名或列号。

    list
  3. 以上输出为vector,但如果我们需要sapply使用 mean.norm <- sapply(norm.df, mean, na.rm=TRUE)

    colMeans(norm.df, na.rm=TRUE)

    或者如果我们正在寻找一个紧凑而有效的代码,可以使用 <div id="1"> <div id=2"><button id="button">Click me</button></div> <div id=3"><iframe src"http://website.com"></iframe> </div> </div> (来自@ Roland的评论)

答案 1 :(得分:0)

基于dplyr的解决方案更符合@Akrun提供的lapply解决方案:

library(dplyr)
library(tidyr)
dat = data.frame(matrix(runif(100), 10, 10))
dat %>% gather(key, value) %>% group_by(key) %>% 
   summarise(mn = mean(value), stdev = sd(value))
Source: local data frame [10 x 3]

      key        mn     stdev
   (fctr)     (dbl)     (dbl)
1      X1 0.2817435 0.2795313
2      X2 0.4039304 0.3273860
3      X3 0.4994540 0.2612170
4      X4 0.4302393 0.3548886
5      X5 0.4095109 0.3707861
6      X6 0.4039782 0.2737998
7      X7 0.3985275 0.3672740
8      X8 0.5691146 0.2139044
9      X9 0.5315091 0.2943599
10    X10 0.5471878 0.3904215

我使用gather将数据集从宽格式转换为长格式:

dat %>% gather(key, value) %>% head(15)
   key      value
1   X1 0.12273665
2   X1 0.04694209
3   X1 0.06572691
4   X1 0.87899058
5   X1 0.40901575
6   X1 0.63833813
7   X1 0.09088830
8   X1 0.18513657
9   X1 0.10783958
10  X1 0.27182005
11  X2 0.54010596
12  X2 0.03647860
13  X2 0.78629356
14  X2 0.96977616
15  X2 0.54121128