Monday 15 June 2015

order - Ordering values within each factor in R -



order - Ordering values within each factor in R -

i have been having problem while , have been using time consuming methods this. know there must improve way this. suppose have next data:

set.seed(123) grouping <- c(rep("a",3),rep("b",3),rep("c",3)) score <- runif(9) score.2 <- rnorm(9) df <- data.frame(group,score,score.2) df grouping score score.2 1 0.2875775 -0.1089660 2 0.7883051 -0.1172420 3 0.4089769 0.1830826 4 b 0.8830174 1.2805549 5 b 0.9404673 -1.7272706 6 b 0.0455565 1.6901844 7 c 0.5281055 0.5038124 8 c 0.8924190 2.5283366 9 c 0.5514350 0.5490967

what want similar info top 2 values score each factor or character column (might different if grouping factor class or character class?), want score.2 remain in data. final output should have 6 rows of data. can help me out?

one alternative slice dplyr 0.3 devel version

library(dplyr) df%>% group_by(group)%>% arrange(desc(score))%>% slice(1:2) #or # do(head(., 2)) # in `dplyr 0.2` # source: local info frame [6 x 2] #groups: grouping # grouping score score.2 #1 0.7883051 -0.1172420 #2 0.4089769 0.1830826 #3 b 0.9404673 -1.7272706 #4 b 0.8830174 1.2805549 #5 c 0.8924190 2.5283366 #6 c 0.5514350 0.5490967

using data.table

library(data.table) setdt(df)[order(group, -score), head(.sd,2), by=group] # grouping score score.2 #1: 0.7883051 -0.1172420 #2: 0.4089769 0.1830826 #3: b 0.9404673 -1.7272706 #4: b 0.8830174 1.2805549 #5: c 0.8924190 2.5283366 #6: c 0.5514350 0.5490967

r order

No comments:

Post a Comment