繁体   English   中英

如何使用 sub 或 gsub 命令在 R 中编辑行名

[英]how to edit rownames in R using sub or gsub command

我有一个基因表达文件,它的行名是这样的: GTEX.1117F.3226.SM.5N9CT在此处输入图像描述我想编辑它的行名如下:

GTEX-1117F 等等。

我使用了这些命令:

row.names(gene_exp_transpose) <- data
gsub(".","-",row.names(gene_exp_transpose)) #this just gives ----- to all the rownames data 
row.names(gene_exp) substr(data, 0,5) ## but for the last rows, it has 4 character instead of 5.

我们可以这样做:

  1. tibble包中带有rownames_to_colum的列的行名

  2. 使用正则表达式: 'sub('^([^.]+.[^.]+).*', '\\1'删除第二个点之后的所有内容。

  3. 替换. 通过-

  4. 回到行名

library(tibble)
library(dplyr)

df %>% 
  rownames_to_column("X") %>% 
  mutate(X = sub('^([^.]+.[^.]+).*', '\\1', X),
         X = sub('\\.', '-', X)) %>% 
  column_to_rownames("X")

输出:

           ENSG00000223972.5 ENSG00000227232.5 ENSG00000278267.1 ENSG00000243485.5
GTEX-1117F         1.0705061         319.01082         0.0000000         0.0000000
GTEX-111FC         0.0000000         137.62750         0.8192113         1.6384227
GTEX-1128S         0.9312597          98.71353         0.0000000         0.9312597
GTEX-117XS         0.0000000         140.96666         0.0000000         0.7661232
GTEX-1192X         0.9374262         139.67650         0.0000000         0.9374262

数据:

structure(list(ENSG00000223972.5 = c(1.0705061, 0, 0.9312597, 
0, 0.9374262), ENSG00000227232.5 = c(319.01082, 137.6275, 98.71353, 
140.96666, 139.6765), ENSG00000278267.1 = c(0, 0.8192113, 0, 
0, 0), ENSG00000243485.5 = c(0, 1.6384227, 0.9312597, 0.7661232, 
0.9374262)), class = "data.frame", row.names = c("GTEX.1117F.3226.SM.5N9CT", 
"GTEX.111FC.3126.SM.5GZZ2", "GTEX.1128S.2726.SM.5H12C", "GTEX.117XS.3026.SM.5N9CA", 
"GTEX.1192X.3126.SM.5N9BY"))

基础 R 解决方案。 TarJae 的答案中借来的数据。

在第一条指令中,正则表达式与 TarJae 的几乎相同,但有两个不同之处:

  1. 第一个要匹配的句点被转义;
  2. 字符串的结尾是明确的。

然后唯一的句点被一个破折号"_"代替。

row.names(df) <- sub('^([^.]+\\.[^.]+).*$', '\\1', row.names(df))
row.names(df) <- sub('\\.', '-', row.names(df))
row.names(df)
#> [1] "GTEX-1117F" "GTEX-111FC" "GTEX-1128S" "GTEX-117XS" "GTEX-1192X"

reprex 包于 2022-07-02 创建 (v2.0.1)


编辑

onyambu 的评论使上述代码成为单行代码。

sub('^([^.]+)\\.([^.]+).*', '\\1-\\2', rownames(df))
#> [1] "GTEX-1117F" "GTEX-111FC" "GTEX-1128S" "GTEX-117XS" "GTEX-1192X"

reprex 包于 2022-07-02 创建 (v2.0.1)

暂无
暂无

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

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