提取对应于任何其他列的前k个的值

Ami*_*tai 1 join r data.table

如何进入一个表格,他的'x'值对应于'y'和'z'的前k值?

> dt <- data.table( x = letters[c(1, 1, 3, 2, 3, 1, 1)],
                    y = c(1, 2, 1, 2, 2, 1, 1), z = c(1, 2, 3) )
> dt
   x y z
1: a 1 1
2: a 2 2
3: c 1 3
4: b 2 1
5: c 2 2
6: a 1 3
7: a 1 1
Run Code Online (Sandbox Code Playgroud)

这种情况可以通过连接来解决,还是我必须遍历不是'x'的列?

> requested.output
   var x Val
1:   y a   2
2:   y b   2
3:   y c   2
4:   z c   3
5:   z a   3
6:   z a   2
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 5

无需循环或连接,您可以根据x列简单地转换为长格式,按value递减顺序排序,并根据每个选择前3行variable.

melt(dt, id = "x")[order(-value), .SD[1:3], keyby = variable]
#    variable x value
# 1:        y a     2
# 2:        y b     2
# 3:        y c     2
# 4:        z c     3
# 5:        z a     3
# 6:        z a     2
Run Code Online (Sandbox Code Playgroud)