我的数据看起来像
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中做到这一点。
答案 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。您可能会觉得不知所措,所以要了解,请逐步进行,并查看解决方案的发展方式。