首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提取与任何其他列顶部k对应的值。

提取与任何其他列顶部k对应的值。
EN

Stack Overflow用户
提问于 2016-01-24 22:33:24
回答 2查看 54关注 0票数 1

我如何进入一个表,他的值'x‘对应于'y’和'z‘的顶部k值?

代码语言:javascript
复制
> 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”的列上循环?

代码语言:javascript
复制
> 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-24 22:52:56

不需要循环或连接,只需根据x列转换为长格式,按value顺序排序,然后根据每个variable选择前3行。

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2016-01-24 23:13:46

如果有人对dplyrtidyr解决方案感兴趣的话。

代码语言:javascript
复制
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     2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34982359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档