【发布时间】:2019-03-12 06:47:06
【问题描述】:
data.table 对每行中的值进行排序的方式是什么?我可以很容易地编写一个循环来逐行进行排序,但我认为这不是一种非常聪明的做事方式。
例子:
让我们有一个data.table 喜欢:
df = data.table(ID = c('a', 'b', 'c', 'd', 'e', 'f'),
v1 = c(1,2,1,3,4,5),
v2 = c(2,3,6,1,0,2),
v3 = c(0,0,1,2,3,5))
我可以像这样使用for loop 对其进行排序:
for (i in 1:nrow(df))
{
df[i, 2:4] = sort(df[i, 2:4], decreasing = T)
}
它给出了预期的结果:
ID v1 v2 v3
1: a 2 1 0
2: b 3 2 0
3: c 6 1 1
4: d 3 2 1
5: e 4 3 0
6: f 5 5 2
但这似乎是一种很慢的做事方式。
【问题讨论】:
-
@zx8754 Akrun 的解决方案有效。我应该关闭还是完全删除?
-
请不要删除,有重复的帖子很好。
-
对于未来的读者:这就是 akrun 对上述数据集的回答:
dcast(melt(df, id.var='ID')[order(-value), .SD, ID][, N := 1:.N , .(ID)], ID~N, value.var=c("value")) -
这个问题与stackoverflow.com/questions/35891340/row-wise-sorting-in-r 中提出的问题不同,尽管 Akrun 的回答包括这个问题。在这个问题中,是否询问如何使用“data.table”进行排序。就谷歌搜索键而言,它很重要。您不应该关闭问题的答案。
标签: r data.table