首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配字符串的列的行平均值

匹配字符串的列的行平均值
EN

Stack Overflow用户
提问于 2015-09-23 12:56:42
回答 1查看 1.4K关注 0票数 1

下面有一个数据框架,我希望找到所有具有头*R的列和所有带有*G的列的平均行值。

然后输出应该是四列: Rfam、Classes、avg.rowR、avg.rowG。

我正在使用rowMeans()函数,但我不知道如何指定列。

代码语言:javascript
复制
Rfam    Classes 26G 26R 35G 35R 46G 46R 48G 48R 55G 55R
5_8S_rRNA   rRNA    63  39  8   27  26  17  28  43  41  17
5S_rRNA rRNA    171 149 119 109 681 47  95  161 417 153
7SK 7SK 53  282 748 371 248 42  425 384 316 198
ACA64   Other   7   8   19  2   10  1   36  10  10  4
let-7   miRNA   121825  73207   25259   75080   54301   63510   30444   53800   78961   47533
lin-4   miRNA   10149   16263   5629    19680   11297   37866   3816    9677    11713   10068
Metazoa_SRP SRP 317 1629    1008    418 1205    407 1116    1225    1413    1075
mir-1   miRNA   3   4   1   2   0   26  1   1   0   4
mir-10  miRNA   912163  1411287 523793  1487160 517017  1466085 107597  551381  727720  788201
mir-101 miRNA   461 320 199 553 174 460 278 297 256 254
mir-103 miRNA   937 419 202 497 318 217 328 343 891 439
mir-1180    miRNA   110 32  4   17  53  47  6   29  35  22
mir-1226    miRNA   11  3   0   3   6   0   1   2   5   4
mir-1237    miRNA   3   2   1   1   0   1   0   2   1   1
mir-1249    miRNA   5   14  2   9   4   5   9   5   7   7
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-23 13:05:04

代码语言:javascript
复制
newcols <- sapply(c("R$", "G$"), function(x) rowMeans(df[grep(x, names(df))]))
setNames(cbind(df[1:2], newcols), c(names(df)[1:2], "avg.rowR", "avg.rowG"))
#           Rfam Classes  avg.rowR avg.rowG
# 1    5_8S_rRNA    rRNA      28.6     33.2
# 2      5S_rRNA    rRNA     123.8    296.6
# 3          7SK     7SK     255.4    358.0
# 4        ACA64   Other       5.0     16.4
# 5        let-7   miRNA   62626.0  62158.0
# 6        lin-4   miRNA   18710.8   8520.8
# 7  Metazoa_SRP     SRP     950.8   1011.8
# 8        mir-1   miRNA       7.4      1.0
# 9       mir-10   miRNA 1140822.8 557658.0
# 10     mir-101   miRNA     376.8    273.6
# 11     mir-103   miRNA     383.0    535.2
# 12    mir-1180   miRNA      29.4     41.6
# 13    mir-1226   miRNA       2.4      4.6
# 14    mir-1237   miRNA       1.4      1.0
# 15    mir-1249   miRNA       8.0      5.4

在列名中查找模式的一种方法是使用grep系列函数。函数调用grep("R$", names(df))将返回以R结尾的所有列名的索引,当我们将其与sapply一起使用时,我们可以在一个表达式中搜索R和G列。

第二行的核心是cbind(df[1:2], newcols)。这是df的前两列和平均值的两个新列的绑定。用setNames(.., c(names(df)f[1:2]....))对列名进行包装,使其与所需的输出相匹配。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32740242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档