R 创建给定两个变量的序列号

R 创建给定两个变量的序列号,r,plyr,R,Plyr,我有一个data.frame,看起来很像这个: pp <- data.frame(a=c(1,1,1,2,2,3), zing=c("a", "b", "c", "d", "e", "f")) pp a zing 1 a 1 b 1 c 2 d 2 e 3 f 感谢您的帮助。qq使用数据的方法。表: q <- transform(q, nr = ave(a, a, FUN = seq_a

我有一个
data.frame
,看起来很像这个:

pp <- data.frame(a=c(1,1,1,2,2,3), zing=c("a", "b", "c", "d", "e", "f"))

pp

a   zing  
1   a     
1   b     
1   c     
2   d     
2   e     
3   f     

感谢您的帮助。

q
q使用
数据的方法。表

q <- transform(q, nr = ave(a, a, FUN = seq_along))
library(data.table)
##
q <- data.frame(
  a=c(1,1,1,2,2,3), 
  zing=c("a", "b", "c", "d", "e", "f"),
  stringsAsFactors=F)
setDT(q)
##
q[,nr:=1:.N,by=a]
##
> q
   a zing nr
1: 1    a  1
2: 1    b  2
3: 1    c  3
4: 2    d  1
5: 2    e  2
6: 3    f  1
库(data.table)
##
q q
一种新的天然橡胶
1:1A
2:1b2
3:1C3
4:2d1
5:2e2
6:3f1

一种具有
数据的方法。表

library(data.table)
##
q <- data.frame(
  a=c(1,1,1,2,2,3), 
  zing=c("a", "b", "c", "d", "e", "f"),
  stringsAsFactors=F)
setDT(q)
##
q[,nr:=1:.N,by=a]
##
> q
   a zing nr
1: 1    a  1
2: 1    b  2
3: 1    c  3
4: 2    d  1
5: 2    e  2
6: 3    f  1
库(data.table)
##
q q
一种新的天然橡胶
1:1A
2:1b2
3:1C3
4:2d1
5:2e2
6:3f1

这里有另一个使用dplyr的选项:

library(dplyr)
pp %>% group_by(a) %>% mutate(nr = row_number())

如果您在处理大型数据集,dplyr和data.table都将比ave更高效。如果数据没有那么大,您可能不需要这些软件包。

这里是使用dplyr的另一个选项:

library(dplyr)
pp %>% group_by(a) %>% mutate(nr = row_number())

如果您在处理大型数据集,dplyr和data.table都将比ave更高效。如果数据不是那么大,您可能不需要这些包。

另一个选项是使用
getanID
from
splitstackshape

 library(splitstackshape)
 getanID(pp,'a')
 #   a zing .id
 #1: 1    a   1
 #2: 1    b   2
 #3: 1    c   3
 #4: 2    d   1
 #5: 2    e   2
 #6: 3    f   1

另一个选项是使用
splitstackshape

 library(splitstackshape)
 getanID(pp,'a')
 #   a zing .id
 #1: 1    a   1
 #2: 1    b   2
 #3: 1    c   3
 #4: 2    d   1
 #5: 2    e   2
 #6: 3    f   1

q
也是用于退出R的函数,我建议您为变量使用另一个名称。
q
也是用于退出R的函数,我建议您为变量使用另一个名称。如果
pp
将更改为
pp,您可以定义
count Try
pp%>%groupby(a)%%mutate,命令将如何更改(nr=min\u rank(zing))
如果
pp
将更改为
pp,则命令将如何更改您可以定义
count Try
pp%>%group\u by(a)%%>%mutate(nr=min\u rank(zing))