如何在R中使用列号获取特定列的名称

yzckvree  于 2023-03-05  发布在  其他
关注(0)|答案(4)|浏览(194)

我创建了一个函数,它可以求出矩阵中所有列的平均值,如下所示:

Finding_mean <- function(m = c(matrix)) {    
  i = 1
  while(i < 15){ 
  matrix_mean = (mean(matrix[,i],na.rm=TRUE))     
  print(matrix_mean) 
  i = i + 1
  }
  }

输出如下所示:

[1] 38.921
[1] 7.702
[1] 6.259
[1] 1.026
[1] 4.635
[1] 0.069
[1] 4.261
[1] 32.007
[1] 30.866
[1] 9.123916
[1] 0.4012346
[1] 24.11404
[1] 10.33333
[1] 62.873

我希望列的名称与值沿着打印,而不仅仅是值,如下所示:

white = 38.921
black = 7.702

我想让这段代码在while循环中打印列的名称,因此我需要一个函数,当我给予它矩阵名称和列号时,它会打印列的名称。

colnames(matrix[1, i)

这将导致null,我知道这是因为行和列的名称不能通过索引调用,但是还有什么选择呢?
救命啊!

ubof19bj

ubof19bj1#

在R中,您可以不使用loop和while来实现这一点。
R基础代码:

paste(colnames(mat), apply(mat, 2, mean, na.rm = T), sep = " = ")

使用以下代码创建矩阵:

mat <- matrix(data = rnorm(100, 10), ncol = 10)
colnames(mat) <- LETTERS[1:10]
lmvvr0a8

lmvvr0a82#

它使用 Dataframe 工作:

cars <- mtcars
cmeans <- colMeans(cars)
outputs <- paste0(colnames(cars), ' = ', cmeans)
df <- data.frame(outputs)
df$outputs <- format(df$outputs, justify = 'left')
head(df)
            outputs
1 mpg = 20.090625  
2 cyl = 6.1875     
3 disp = 230.721875
4 hp = 146.6875    
5 drat = 3.5965625 
6 wt = 3.21725
nzk0hqpo

nzk0hqpo3#

如果您确实是从矩阵开始,则使用colMeans()apply()是有意义的。例如:

m <- matrix(1:4, ncol = 2)
colnames(m) <- c("white", "black")

colMeans(m)
#> white black 
#>   1.5   3.5
apply(m, 2, mean)
#> white black 
#>   1.5   3.5

创建于2023年3月4日,使用reprex v2.0.2
如果m真的是一个 Dataframe ,这就不是一个好的解决方案,因为它会把它转换成一个矩阵。

sapply(mtcars, mean)
#>        mpg        cyl       disp         hp       drat         wt       qsec 
#>  20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750 
#>         vs         am       gear       carb 
#>   0.437500   0.406250   3.687500   2.812500

创建于2023年3月4日,使用reprex v2.0.2

fslejnso

fslejnso4#

colMeans和as.matrix都保留名称,因此这会给出所需的输出,并且比使用 *apply函数之一更高效和自文档化:

cars <- mtcars
cmeans <- colMeans(cars)
as.matrix(cmeans)
#------------
          [,1]
mpg   20.090625
cyl    6.187500
disp 230.721875
hp   146.687500
drat   3.596563
wt     3.217250
qsec  17.848750
vs     0.437500
am     0.406250
gear   3.687500
carb   2.812500

此外,您还可以使用名称为该结构建立索引:

> mat_as_col <- as.matrix(cmeans)
> mat_as_col[c("disp", "wt"), ]
     disp        wt 
230.72188   3.21725 
> mat_as_col[c("disp", "wt"), , drop=FALSE]
          [,1]
disp 230.72188
wt     3.21725

相关问题