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

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

最佳答案

看起来你只想生成一个按组排序的“序列号”,其中组是“nick”列。如果是这样,您可以在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

关于r - R中的ROW_NUMBER()个(PARTITION BY nick ORDER BY p_time),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14976210/

10-12 16:31