如何将类列表的输出分配给R中的变量?

时间:2018-07-17 10:33:08

标签: r list

我的数据看起来像

   Name  Pd1 Pd2 Pd3 Pd4  
    A     2   6   8   9
    B     6   3   7   1

我想收集值从高到低的列名称。 我希望看到我的数据

   Name        pdts
    A   c(pd4,pd3,pd2,pd1)
    B   c(Pd3,Pd1,Pd2,Pd4)

请帮助我在R中做到这一点。

1 个答案:

答案 0 :(得分:2)

您可以将data.table的{​​{1}}函数与apply结合使用:

sort.list

说明:

1。library(data.table) setDT(df) df <- df[, list(list((colnames(.SD)[c(t(apply(.SD, 1, function(x) sort.list(x, decreasing = T))))]))) ,Name] print(df) Name V1 1: A Pd4,Pd3,Pd2,Pd1 2: B Pd3,Pd1,Pd2,Pd4 -按行给出列的索引。

2。apply(.SD, 1, function(x) sort.list(x, decreasing = T)-我们对结果进行转置以获得逐行矢量。

3。t-这个完整的函数明智地返回按列排序的索引,这就是我们需要解决的问题。

4。[c(t(apply(.SD, 1, function(x) sort.list(x, decreasing = T))))]-.SD是data.table中使用的特殊符号。它基本上是指分组的数据,在这里我们获得列名。

5。最后,我们根据在步骤3中获得的索引对列名称进行排序。

6。然后,我们按colnames(.SD)列分组以获取每个名称的解决方案。

7。您可能会觉得不知所措,所以要了解,请逐步进行,并查看解决方案的发展方式。