在不影响值的情况下右移列名称

shift col names by right without compromising the values

我的数据如下所示:

我想在不影响值的情况下将 ENSG0000000223972.5 右移一位。 因此 ENSG0000223972.5 应该取代 ENSGOOOO227232.5 等等。在不更改值的情况下将列名向右移动 1 个位置。所以最终 row1col1 名称将为空。 我尝试这样做:

names(genecount) = names(genecount)[-1]
                   

基数 R 的一种可能性是首先创建一个空列(即 new),这样我们就可以将列名向右移动。然后,您想使用从第一列到最后一列(减去 new 列)的名称来覆盖列名称。但是,我还为第一列添加了一个名为 name.

的名称
df$new <- ""
names(df)[1:ncol(df)] <- c("name", names(df)[1:ncol(df) - 1])

可能的tidyverse解决方案:

library(tidyverse)

df %>%
  mutate(new = NA) %>%
  column_to_rownames(names(df)[1]) %>%
  rename_all(~names(df)) %>%
  rownames_to_column("name")

输出

                      name ENSGO00000223972.5 ENSG00000227232.5 ENSGO0000278267.1 ENSGO0000243485.5
1 GTEX-1117F-0226-SM-5GZZ7                  0               187                 0                  
2 GTEX-1117F-0426-SM-5EGHI                  0               109                 0                  

数据

df <- structure(list(ENSGO00000223972.5 = c("GTEX-1117F-0226-SM-5GZZ7", "GTEX-1117F-0426-SM-5EGHI"),
                     ENSG00000227232.5 = c(0, 0),
                     ENSGO0000278267.1 = c(187, 109), ENSGO0000243485.5 = c(0, 0)),
                class = "data.frame", row.names = c(NA, -2L))