首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R基于列名长度的摘要

R基于列名长度的摘要
EN

Stack Overflow用户
提问于 2013-07-08 22:26:48
回答 2查看 1.4K关注 0票数 0

我有以下问题:我有一个有80列的矩阵,其名称为10/11、21/22、31/32或42/43个字符。名字完全不同,但长度总是适合四个组中的一个。现在我想添加四列,因为我得到了对应于一组的所有列的值的总和。这里有一个小例子来说明我的意思

代码语言:javascript
运行
复制
a<-rnorm(1:100)
b<-rnorm(1:100)
cc<-rnorm(1:100)
dd<-rnorm(1:100)
eee<-rnorm(1:100)
fff<-rnorm(1:100)
g<-data.frame(a,b,cc,dd,eee,fff)
g$group1<-"sum of all columns of with headers of length 1 (in this case a+b)"
g$group2<-"sum of all columns of with headers of length 2 (in this case cc+dd)"
g$group3<-"sum of all columns of with headers of length 3 (in this case eee+fff)"

我能够使用melt()将矩阵传输到数据帧,并使用stringr::str_length()执行操作。然而,我无法将其转换回我真正需要的矩阵作为最终输出。列没有按顺序排列,排序对我没有多大帮助,因为列数取决于上一次计算的结果,而且每次都定义数据帧范围太单调乏味了。希望你能帮上忙。

EN

Stack Overflow用户

发布于 2013-07-08 22:44:40

另一种方法

代码语言:javascript
运行
复制
set.seed(123)
a <- rnorm(1:100)
b <- rnorm(1:100)
cc <- rnorm(1:100)
dd <- rnorm(1:100)
eee <- rnorm(1:100)
fff <- rnorm(1:100)
g <- data.frame(a,b,cc,dd,eee,fff)

for ( i in 1:3 )
    eval(parse(text = sprintf("g$group%s <- rowSums(g[nchar(names(g)) == %s])", i, i)))

## 'data.frame':    100 obs. of  9 variables:
##  $ a     : num  -0.5605 -0.2302 1.5587 0.0705 0.1293 ...
##  $ b     : num  -0.71 0.257 -0.247 -0.348 -0.952 ...
##  $ cc    : num  2.199 1.312 -0.265 0.543 -0.414 ...
##  $ dd    : num  -0.715 -0.753 -0.939 -1.053 -0.437 ...
##  $ eee   : num  -0.0736 -1.1687 -0.6347 -0.0288 0.6707 ...
##  $ fff   : num  -0.602 -0.994 1.027 0.751 -1.509 ...
##  $ group1: num  -1.2709 0.0267 1.312 -0.277 -0.8223 ...
##  $ group2: num  1.484 0.56 -1.204 -0.509 -0.851 ...
##  $ group3: num  -0.675 -2.162 0.392 0.722 -0.838 ...
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17529175

复制
相关文章

相似问题

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