0

我有一个简单的问题,我无法用 for 循环解决。我每次在我的 for 循环中计算并保存一列的平均值。

在第一个循环中,平均值被保存到变量中。但在第二个循环中,column2 的平均值将替换 column1 的平均值。这是一个非常基本的问题,但我不知道该怎么做。

#read.table(file1)
for (x in 1:100){
f <- mean(file1[,x])
}

我想将所有列的平均值保存在 1 个变量中(假设它被称为“f”)。

f <- c(meancol1, meancol2, meancol3... meancol100)

有任何想法吗?

4

2 回答 2

2

更简单的是你可以使用colMeans函数。这是一个例子

> set.seed(001)  # Generating some random data
> file1 <- data.frame(matrix(rnorm(50, 100, 5), ncol=5))
> file1 # this is how the artificial data.frame should look like
          X1        X2        X3        X4        X5
1   96.86773 107.55891 104.59489 106.79340  99.17738
2  100.91822 101.94922 103.91068  99.48606  98.73319
3   95.82186  96.89380 100.37282 101.93836 103.48482
4  107.97640  88.92650  90.05324  99.73097 102.78332
5  101.64754 105.62465 103.09913  93.11470  96.55622
6   95.89766  99.77533  99.71936  97.92503  96.46252
7  102.43715  99.91905  99.22102  98.02855 101.82291
8  103.69162 104.71918  92.64624  99.70343 103.84266
9  102.87891 104.10611  97.60925 105.50013  99.43827
10  98.47306 102.96951 102.08971 103.81588 104.40554
> colMeans(file1)  # this part computes the means for each column without a 'for' loop
       X1        X2        X3        X4        X5 
100.66101 101.24422  99.33163 100.60365 100.67068 

看一眼?colMeans

如果您有非数字列,您可以使用sapply内部自动跳过它们colMeans,例如:

set.seed(001)  # Generating some random data
file1 <- data.frame(matrix(rnorm(50, 100, 5), ncol=5))
# Creating three columns with non-numeric data
factors <- data.frame(matrix(sample(letters, 30, TRUE), ncol=3))

file1 <- cbind(factors, file1) # this is your data.frame
colnames(file1) <- paste0('Col.', 1:ncol(file1)) # set some colnames
file1 # this is the data.frame to work with
> colMeans(file1[sapply(file1, is.numeric)])# colmeans for only those numeric cols
    Col.4     Col.5     Col.6     Col.7     Col.8 
100.65027 101.52467 102.04486  99.14944 100.23847 
于 2012-12-04T11:56:15.787 回答
0

你不需要循环。

f<-apply(file1,2,mean)
于 2012-12-04T11:50:08.070 回答