繁体   English   中英

R:根据列名部分匹配来计算行均值

[英]R: Calculating row mean based on column name partial match

我有一个看起来像这样的表:

  er er.1 as as.1 as.2 rt op
a  1    6 90    8    6  4 87
b  1    8 56    7    5  5  9
c  8    7  6    4    5  9  6
d  1    0  8    6    4  3  6
e  9    7  2    4    3 89  7

我想计算名称部分匹配的列之间的行均值,以得出如下结果:

    er   as           rt     op
a   3.5  34.66666667  4      87
b   4.5  22.66666667  5      9
c   7.5  5            9      6
d   0.5  6            3      6
e   8    3            89     7

我确实找到了一些有关此问题的有用提示:

根据(部分)匹配的列名称计算行均值

但它似乎对我不起作用。 这是我使用的命令:

test <- read.table("test.txt", header=TRUE, row.names=1)

colnames <- c("er", "er", "as", "as", "as", "rt", "op")

means <-sapply(colnames, function(x) rowMeans(test [, grep(x, names(test))] )  )

最后一条命令给我以下错误:

Error in rowMeans(test[, grep(x, names(test))]) : 
  'x' must be an array of at least two dimensions

这是我的数据帧的输出:

structure(list(er = c(1L, 1L, 8L, 1L, 9L), er.1 = c(6L, 8L, 7L, 
0L, 7L), as = c(90L, 56L, 6L, 8L, 2L), as.1 = c(8L, 7L, 4L, 6L, 
4L), as.2 = c(6L, 5L, 5L, 4L, 3L), rt = c(4L, 5L, 9L, 3L, 89L
), op = c(87L, 9L, 6L, 6L, 7L)), .Names = c("er", "er.1", "as", 
"as.1", "as.2", "rt", "op"), class = "data.frame", row.names = c("a", 
"b", "c", "d", "e"))

知道为什么我会收到此错误以及如何解决此错误吗?

谢谢!

我们可以split并获取rowMeans

sapply(split.default(df1, sub("\\..*", "", names(df1))), rowMeans)
#        as  er op rt
#a 34.66667 3.5 87  4
#b 22.66667 4.5  9  5
#c  5.00000 7.5  6  9
#d  6.00000 0.5  6  3
#e  3.00000 8.0  7 89

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM