如何进入一个表格,他的'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)
无需循环或连接,您可以根据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)