我如何进入一个表,他的值'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这种情况是否可以用一个联接来解决,或者我必须在不是“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发布于 2016-01-24 22:52:56
不需要循环或连接,只需根据x列转换为长格式,按value顺序排序,然后根据每个variable选择前3行。
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发布于 2016-01-24 23:13:46
如果有人对dplyr和tidyr解决方案感兴趣的话。
dt %>%
gather(variable, value, -x) %>%
group_by(variable) %>%
filter(row_number(-value)<=3) %>%
ungroup %>%
arrange(variable, desc(value))
## x variable value
## (chr) (fctr) (dbl)
##1 a y 2
##2 b y 2
##3 c y 2
##4 c z 3
##5 a z 3
##6 a z 2https://stackoverflow.com/questions/34982359
复制相似问题