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 循环
来对此进行排序,代码如下:
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
但这种做法似乎非常缓慢。
dcast(melt(df, id.var='ID')[order(-value), .SD, ID][, N := 1:.N , .(ID)], ID~N, value.var=c("value"))
- ismirsehregal