具有
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。
感谢。
答案 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_along
和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