首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“算术级数”重命名数据框中的列

使用“算术级数”重命名数据框中的列
EN

Stack Overflow用户
提问于 2016-07-28 16:47:25
回答 3查看 540关注 0票数 2

假设我有以下data.frame,它由多行(并不是全部显示在这里)和31列组成。第一个被标记为"gene_ID“,从第二列一直到第三十列,它们都有奇怪的名字,如下所示:

代码语言:javascript
复制
 |gene_ID | weird1| weird2|all_the_way_to | weird30|
 |:-------|------:|------:|:--------------|-------:|
 |BPK282x |      4|      1|...            |       7|
 |BPK282y |      5|      2|...            |       8|
 |BPK282z |      6|      3|...            |       9|

我想用这样的模式重命名所有30列的名称: TPM_1、TPM_2、TPM_3、TPM_4.....TPM_30,结果如下表所示:

代码语言:javascript
复制
 |gene_ID | TPM_1| TPM_2|all_the_way_to | TPM_3|
 |:-------|-----:|-----:|:--------------|-----:|
 |BPK282x |     4|     1|...            |     7|
 |BPK282y |     5|     2|...            |     8|
 |BPK282z |     6|     3|...            |     9| 

我可以通过以下命令分别重命名这些列:

代码语言:javascript
复制
names(data.frame) <- c("gene_ID", "TPM_1", "TPM_2", "TPM_3", ..., "TPM_30")

然而,我想知道是否有一种方法可以通过使用一个函数来自动化这个过程,该函数可以在列名上使用类似于算术级数的东西。换句话说,我正在尝试用一种模式(TPM_followed by A number)来重命名我的列,因为列名应该是"TPM_n“、"TPM_n+1”、"TPM_n+2“、”TPM_n+3",一直到"TPM_n+30“。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-28 16:48:57

您可以使用paste0

代码语言:javascript
复制
colnames(df) <- paste0("TPM_", 1:30)

#[1] "TPM_1"  "TPM_2"  "TPM_3"  "TPM_4"  "TPM_5"  "TPM_6"  "TPM_7"  "TPM_8" "TPM_9" 
#[10]"TPM_10" "TPM_11" "TPM_12" TPM_13" "TPM_14" "TPM_15" "TPM_16" "TPM_17" "TPM_18"
#[19]"TPM_19" TPM_20" "TPM_21" "TPM_22" "TPM_23" "TPM_24" "TPM_25" "TPM_26" "TPM_27"
#[28] "TPM_28" "TPM_29" "TPM_30"

您始终可以指定要更改的列的索引

代码语言:javascript
复制
colnames(df)[2:31] <- paste0("TPM_", 1:30)
票数 4
EN

Stack Overflow用户

发布于 2016-07-28 16:49:06

我们可以使用paste

代码语言:javascript
复制
colnames(df1)[-1] <- paste0("TPM_", head(seq_along(df1),-1))
colnames(df1)
#[1] "gene_ID" "TPM_1"   "TPM_2"  

在这里,我们只命名倒数第二列。OP提到第一列是"gene_ID“。此外,当数据集发生变化时,这是更一般的情况,我们不需要手动计数1、2、3、4等来检查是否有30列或100列。

数据

代码语言:javascript
复制
df1 <- structure(list(gene_ID = c("BPK282x", "BPK282y", "BPK282z"), 
weird1 = 4:6, weird2 = 1:3), .Names = c("gene_ID", "weird1", 
"weird2"), class = "data.frame", row.names = c(NA, -3L))
票数 1
EN

Stack Overflow用户

发布于 2016-07-28 16:50:13

使用paste组合字符串和列中的数字级数(例如seq_along)。在标准iris数据集中使用所需的输出:

names(iris) <- paste("TMP", seq_along(iris), sep = "_")

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

https://stackoverflow.com/questions/38631359

复制
相关文章

相似问题

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