Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
190 views
in Technique[技术] by (71.8m points)

r - Add a column to a data frame that index the number of occurrences in a group

Given data frame like this

 Unit    Anything
 A       3.4
 A1      2.2
 A       6.9
 A1      1.1
 B       2
 B       3

Sort by anything, group by unit, add an index

 Unit    Anything   Index
 A       3.4         1
 A1      2.2         2
 A       6.9         2
 A1      1.1         1
 B       2           1
 B       3           2

I know df[order(df$Anything),] orders by Anything. But I can't get a count to work. I tried stuff like

dt = data.table(df)
dt[,count := .N, by = list(Unit)]
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

After reading the related topics, by trial and error, the following seems to work.... ref: Add a "rank" column to a data frame

df <- read.table(header = TRUE, text = "
 Unit    Anything
 A       3.4
 A1      2.2
 A       6.9
 A1      1.1
 B       2
 B       3
")

df <- transform(df, x= ave(Anything,Unit,FUN=function(x) order(x,decreasing=F)))

df
  Unit Anything x
1    A      3.4 1
2   A1      2.2 2
3    A      6.9 2
4   A1      1.1 1
5    B      2.0 1
6    B      3.0 2

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...