R中的ROW_NUMBER()超过(通过p_time的划分ORDER)

时间:2013-02-20 09:21:46

标签: r postgresql

具有

x=data.frame(nick=c('a','a','b','b','b','c'), p_time=1:6)
  nick p_time
1    a      1
2    a      2
3    b      3
4    b      4
5    b      5
6    c      6

我怎么能得到这个:

  nick p_time flag
1    a      1    1
2    a      2    2
3    b      3    1
4    b      4    2
5    b      5    3
6    c      6    1

我使用pgsql ROW_NUMBER() OVER (PARTITION BY nick ORDER BY p_time)来获取它,但现在只需要使用R。 感谢。

3 个答案:

答案 0 :(得分:1)

尝试dplyr :: row_number()函数

x %>% 
  group_by(nick) %>%
  mutate(flag = row_number())

# A tibble: 6 x 3
# Groups: nick [3]
  nick  p_time  flag
  <fct>  <int> <int>
1 a          1     1
2 a          2     2
3 b          3     1
4 b          4     2
5 b          5     3
6 c          6     1

更多信息here

答案 1 :(得分:0)

试试这个

x$flag<-as.vector(unlist(tapply(x$p_time,x$nick,FUN=function(x){1:length(x)})));

答案 2 :(得分:0)

看起来您只想生成按组排序的“序列号”,其中您的组是“缺口”列。如果是这种情况,您可以在ave中使用seq_alongwithin

within(x, {
  flag <- ave(as.character(nick), nick, FUN = seq_along)
})
#   nick p_time flag
# 1    a      1    1
# 2    a      2    2
# 3    b      3    1
# 4    b      4    2
# 5    b      5    3
# 6    c      6    1