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 F
Pathway4 A B C D E
Pathway5 A B H NA F我想对上面的数据帧(df)重新排序,以便在蛋白质通路中共享最大相似性的通路(也就是第2:4列中的最大相似性)依次排序。
更清楚地说,我希望输出如下所示:
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),但到目前为止都没有成功。
此外,虽然只按非NA字符量对此数据集进行排序,但我将分析的实际数据集将具有数百条具有相同步长的路径。
发布于 2017-06-28 23:03:37
使用dplyr包中的arrange。它将根据一个或多个列对数据框进行排序。您可以使用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操作不保留行名,因为它们遵循Hadley Wickham的Tidy data definition (简而言之,行名是不可取的,因为R希望行名是唯一的)。您可以使用tibble包中的rownames_to_column来跟踪您的路径标识符:
> 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如果您需要将行名放回原处,可以使用等效的tibble::column_to_rownames,但通常不建议这样做。
发布于 2017-06-28 22:47:15
试试这个(顺便说一句:在列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**
https://stackoverflow.com/questions/44805607
复制相似问题