R - 重新排序数据框保持第一列
R - reorder dataframe keeping first column
我有两个数据框
第一个(A):
第一列是 "rownames"
GTEX-11DXY-0426-SM-5H12R GTEX-11EQ8-0826-SM-5N9FG [...30]
ENSG00000223972.4 0 1
ENSG00000227232.4 663 802
ENSG00000243485.2 0 1
ENSG00000237613.2 0 0
ENSG00000268020.2 0 1
ENSG00000240361.1 3 0
它继续使用相同格式的 30 列
我想根据另一个数据框列的顺序对其进行排序,如下所示:
> head(targets10)
# A tibble: 6 x 7
# Groups: Group [1]
Sample_Name Grupo_analisis body_site molecular_data_~ sex Group
1 GTEX-11XUK~ 3 Thyroid RNA Seq (NGS) fema~ ELI
2 GTEX-R55G-~ 3 Thyroid RNA Seq (NGS) fema~ ELI
3 GTEX-PLZ4-~ 3 Thyroid RNA Seq (NGS) fema~ ELI
4 GTEX-14AS3~ 3 Thyroid RNA Seq (NGS) fema~ ELI
5 GTEX-14BMU~ 3 Thyroid Allele-Specific~ fema~ ELI
6 GTEX-13QJC~ 3 Thyroid Allele-Specific~ fema~ ELI
# ... with 1 more variable: ShortName <fct>
列 Sample_Name 与数据框 A 中列的 headers 同名。
我希望它们具有相同的顺序,因此数据框 A 中的第一列是目标中的第一行10$Sample_Name
我尝试了以下方法:
library(data.table)
setDT(countdata)
setcolorder(countdata, as.character(coldata$Sample_Name))
它有效,但是从数据框中删除了我的 rownames
,我需要它们留下!!!
请帮帮我
非常感谢
你可以这样做:
dput(dfB$Sample_Name)
会将 Sample_Name
列的值打印到您的控制台。然后你可以复制输出,然后做:
library(dplyr)
dfA <- dfA %>%
select("GTEX-11XUK", "GTEX-R55G", etc...)
或者 Gregor 指出的不那么老套的方法:
dfA <- dfA %>%
select(all_of(dfB$Sample_Name))
不考虑您的数据是 tibbles 并且计划是 data.tables,这适用于普通 data.frames :
A <- data.frame(id = LETTERS, c = rnorm(26), d=rnorm(26), a = 1:26, b = 26:1)
B <- data.frame(sample = c("a", "b", "c", "d"), ignore =rnorm(4))
new.A <- cbind(A$id, A[,B$sample])
head(new.A)
编辑
刚刚意识到 id 不在列中,而是在行名中。使这种方法更容易:
A <- data.frame(c = rnorm(26), d=rnorm(26), a = 1:26, b = 26:1)
rownames(A) <- LETTERS
B <- data.frame(sample = c("a", "b", "c", "d"), ignore =rnorm(4))
new.A <- A[, B$sample]
head(new.A)
我有两个数据框
第一个(A):
第一列是 "rownames"
GTEX-11DXY-0426-SM-5H12R GTEX-11EQ8-0826-SM-5N9FG [...30]
ENSG00000223972.4 0 1
ENSG00000227232.4 663 802
ENSG00000243485.2 0 1
ENSG00000237613.2 0 0
ENSG00000268020.2 0 1
ENSG00000240361.1 3 0
它继续使用相同格式的 30 列
我想根据另一个数据框列的顺序对其进行排序,如下所示:
> head(targets10)
# A tibble: 6 x 7
# Groups: Group [1]
Sample_Name Grupo_analisis body_site molecular_data_~ sex Group
1 GTEX-11XUK~ 3 Thyroid RNA Seq (NGS) fema~ ELI
2 GTEX-R55G-~ 3 Thyroid RNA Seq (NGS) fema~ ELI
3 GTEX-PLZ4-~ 3 Thyroid RNA Seq (NGS) fema~ ELI
4 GTEX-14AS3~ 3 Thyroid RNA Seq (NGS) fema~ ELI
5 GTEX-14BMU~ 3 Thyroid Allele-Specific~ fema~ ELI
6 GTEX-13QJC~ 3 Thyroid Allele-Specific~ fema~ ELI
# ... with 1 more variable: ShortName <fct>
列 Sample_Name 与数据框 A 中列的 headers 同名。
我希望它们具有相同的顺序,因此数据框 A 中的第一列是目标中的第一行10$Sample_Name
我尝试了以下方法:
library(data.table)
setDT(countdata)
setcolorder(countdata, as.character(coldata$Sample_Name))
它有效,但是从数据框中删除了我的 rownames
,我需要它们留下!!!
请帮帮我
非常感谢
你可以这样做:
dput(dfB$Sample_Name)
会将 Sample_Name
列的值打印到您的控制台。然后你可以复制输出,然后做:
library(dplyr)
dfA <- dfA %>%
select("GTEX-11XUK", "GTEX-R55G", etc...)
或者 Gregor 指出的不那么老套的方法:
dfA <- dfA %>%
select(all_of(dfB$Sample_Name))
不考虑您的数据是 tibbles 并且计划是 data.tables,这适用于普通 data.frames :
A <- data.frame(id = LETTERS, c = rnorm(26), d=rnorm(26), a = 1:26, b = 26:1)
B <- data.frame(sample = c("a", "b", "c", "d"), ignore =rnorm(4))
new.A <- cbind(A$id, A[,B$sample])
head(new.A)
编辑
刚刚意识到 id 不在列中,而是在行名中。使这种方法更容易:
A <- data.frame(c = rnorm(26), d=rnorm(26), a = 1:26, b = 26:1)
rownames(A) <- LETTERS
B <- data.frame(sample = c("a", "b", "c", "d"), ignore =rnorm(4))
new.A <- A[, B$sample]
head(new.A)