首页 > 解决方案 > 获取数据框中每一行的升序列名列表

问题描述

我有一个数据框,它由一列 ID 和许多列组成,每个 ID 具有不同的值,其中许多是 NA。例如:

     ID  w  x  y  z
1 User1  3  2 NA NA
2 User2  7  9 NA  4
3 User3 NA NA  1 NA
4 User4  3 NA NA  5

有没有办法按照从最小值到最大值的顺序获取列标题的每个 ID 的列表,并删除 NA?

例如:

用户 1:x,w

用户 2:z、w、x

用户 3:是

到目前为止,我对此一无所知。我尝试使用 by_row 获取行的顺序,如下所示:

ordered <- by_row(moves.df, function(order) list(order[,2:ncol(moves.df)]), .collate = "list")$.out

但它的输出只是每一行的单观察数据帧列表,这些数据帧没有以任何方式排序。

ordered2 <- moves.df %>% rowwise() %>% mutate(placelist = list(rank(moves.df[,2:ncol(moves.df)])))

这给了我一个列表,但列表是我不认识的数字。

任何帮助将不胜感激!

标签: rsortingdataframecolumnname

解决方案


我们可以使用apply逐行(margin = 1),对值进行排序并获取列names

apply(df[-1], 1, function(x) names(sort(x)))

#$`1`
#[1] "x" "w"

#$`2`
#[1] "z" "w" "x"

#$`3`
#[1] "y"

#$`4`
#[1] "w" "z"

推荐阅读