r - 使用包含旧行名和新行名的数据框更改行名
问题描述
我有一个数据框(超过 9000 行),其中包含每个细胞簇(列)的某些基因(行)的平均基因表达,现在我需要将基因名称(行名)更改为直系同源物。它看起来像这样:
Cluster1 Cluster2 Cluster3
[Tppp2] 10.32 0.14 2.56
[Mtx1] 6.32 8.77 0.30
[Vps37c] 225.02 132.87 9.52
[Slc39a9] 52.13 18.42 4.12
我还有另一个数据框(超过 13000 行)包含直向同源物;所述基因名称(旧)-直向同源基因名称(新)。它看起来像这样:
GeneName NewGeneName
[1] Vps37c VPS37C
[2] Tppp2 TPPP3
[3] Slc39a9 SLC39A9
[4] Mtx1 MTX1B
因此,对于第一个数据帧中的每一行,行名将与 in 的名称匹配,dataframe2$GeneName
然后将 in 的名称dataframe2$NewGeneName
保存为新的行名(或保存在以正确顺序保存所有新行名的向量中)。例如 Tppp2 将是 TPPP3,依此类推,结果如下:
rownames(expr_df) <- c("TPPP3", "MTX1B", "VPS37C", "SLC39A9"
.
我已经尝试了很多东西,这真的让我很烦恼,我无法让它工作。我不记得我尝试过和失败的所有方法,对不起。
仅供参考:表达数据框的直向同源物和行名的顺序不同,直向同源数据框包含的基因多于表达数据框中的基因。
解决方案
一个tidyverse
解决方案:
df1 %>%
rownames_to_column() %>%
left_join(df2, by = c("rowname" = "GeneName"))
rowname Cluster1 Cluster2 Cluster3 NewGeneName
1 Tppp2 10.32 0.14 2.56 TPPP3
2 Mtx1 6.32 8.77 0.30 MTX1B
3 Vps37c 225.02 132.87 9.52 VPS37C
4 Slc39a9 52.13 18.42 4.12 SLC39A9
数据
df1 <- tibble::tribble(
~Cluster1, ~Cluster2, ~Cluster3,
10.32, 0.14, 2.56,
6.32, 8.77, 0.3,
225.02, 132.87, 9.52,
52.13, 18.42, 4.12
)
df1 <- as.data.frame(df1)
rownames(df1) <- c("Tppp2", "Mtx1", "Vps37c", "Slc39a9")
df2 <- tibble::tribble(
~GeneName, ~NewGeneName,
"Vps37c", "VPS37C",
"Tppp2", "TPPP3",
"Slc39a9", "SLC39A9",
"Mtx1", "MTX1B"
)
推荐阅读
- html - 背景在过渡中摇晃
- html - How to replace html table with Perl Button
- angular - Angular - Reference a library to another in same application
- python-3.x - 使用 Python 进行多子字符串过滤的建议
- python - uszipcode Windows command prompt: ImportError: DLL load failed: The specified module could not be found
- java - 带有 Java Spring 启动的 Redis 会话
- spring - Spring 为每个 POST 请求创建唯一的 @Component
- swift - Use type of Self in overrides
- javascript - axios , login with api , handle token
- c# - How to handle security pop-up in outlook using C#