首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据数据帧的行的相似性对其进行排序

如何根据数据帧的行的相似性对其进行排序
EN

Stack Overflow用户
提问于 2017-06-28 22:37:49
回答 2查看 569关注 0票数 1
代码语言:javascript
复制
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列中的最大相似性)依次排序。

更清楚地说,我希望输出如下所示:

代码语言:javascript
复制
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字符量对此数据集进行排序,但我将分析的实际数据集将具有数百条具有相同步长的路径。

EN

回答 2

Stack Overflow用户

发布于 2017-06-28 23:03:37

使用dplyr包中的arrange。它将根据一个或多个列对数据框进行排序。您可以使用desc按照您的帖子中的要求按降序排序:

代码语言:javascript
复制
> 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来跟踪您的路径标识符:

代码语言:javascript
复制
> 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,但通常不建议这样做。

票数 1
EN

Stack Overflow用户

发布于 2017-06-28 22:47:15

试试这个(顺便说一句:在列Biomarker1中,您的输入和输出不匹配,我根据我的理解更正了输入df,以获得您想要的输出。)

代码语言:javascript
复制
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

**

代码语言:javascript
复制
#             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

**

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44805607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档