0

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

我怎么能得到这个:</p>

  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。谢谢。

4

3 回答 3

3

尝试 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

更多信息在这里

于 2018-02-01T10:52:44.893 回答
1

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

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
于 2013-02-20T09:32:08.020 回答
0

试试这个

x$flag<-as.vector(unlist(tapply(x$p_time,x$nick,FUN=function(x){1:length(x)})));
于 2013-02-20T09:30:47.153 回答