newdf
Beginning1 Protein2 Protein3 Protein4 Biomarker1
Pathway6 A G NA NA E
Pathway3 A G NA NA F
Pathway5 A B H NA E
Pathway2 A B H NA F
Pathway4 A B C D E
Pathway1 A B C D F
我想重新排序上面的数据框(df),以便在蛋白质途径中具有最大相似性的途径(也就是第2列第4列中最大的相似性)彼此相邻排列。
为了更清楚,我希望输出看起来像这样:
{{1}}
怎么会这样做呢?我尝试过各种变体,包括独特的(df),但到目前为止还没有。
此外,虽然按照非NA字符的数量进行排序会对此数据集起作用,但我将分析的实际数据集将有数百个具有相同步骤数量的路径。
答案 0 :(得分:1)
使用arrange
包中的dplyr
。它将基于一列或多列对数据框进行排序。您可以按照帖子中的要求使用desc
按降序排序:
> dplyr::arrange( df, desc(Protein2), desc(Protein3), desc(Protein4) )
Beginning1 Protein2 Protein3 Protein4 Biomarker1
1 A G <NA> <NA> F
2 A G <NA> <NA> E
3 A B H <NA> F
4 A B H <NA> F
5 A B C D F
6 A B C D E
请注意,dplyr
操作不会保留rownames,因为它们遵循Hadley Wickham的Tidy data definition(简而言之,rownames是不受欢迎的,因为R
期望它们是唯一的)。您可以使用rownames_to_column
包中的tibble
来跟踪您的途径标识符:
> tibble::rownames_to_column( df, "Pathway" ) %>%
dplyr::arrange( desc(Protein2), desc(Protein3), desc(Protein4 ) )
Pathway Beginning1 Protein2 Protein3 Protein4 Biomarker1
1 Pathway3 A G <NA> <NA> F
2 Pathway6 A G <NA> <NA> E
3 Pathway2 A B H <NA> F
4 Pathway5 A B H <NA> F
5 Pathway1 A B C D F
6 Pathway4 A B C D E
如果你需要放回rownames,则有一个等效的tibble::column_to_rownames
,但通常建议不要这样做。
答案 1 :(得分:0)
试试这个(顺便说一下:在Biomarker1
列中,输入和输出未匹配,我根据我的理解更正了输入df
以获得所需的输出。)
df[is.na(df)]=''
df$ALL <- do.call(paste0, df[,2:4])
df=df[order(rev(df$ALL),rev(df$Biomarker1)),]
df[df=='']=NA
df$ALL=NULL
Beginning1 Protein2 Protein3 Protein4 Biomarker1
Pathway6 A G <NA> <NA> E
Pathway3 A G <NA> <NA> F
Pathway2 A B H <NA> E
Pathway5 A B H <NA> F
Pathway4 A B C D E
Pathway1 A B C D F
输入
df
**
# Beginning1 Protein2 Protein3 Protein4 Biomarker1
# Pathway3 A G <NA> <NA> F
# Pathway6 A G <NA> <NA> E
# Pathway1 A B C D F
# Pathway2 A B H <NA> E
# Pathway4 A B C D E
# Pathway5 A B H <NA> F
**