2017-01-23 1 views
2
library(plyr) 

data <- data.frame(Age = as.character(c("1-5", "1-5", "6-10", "6-10",  "11-15", "11-15")), 
            Gender = as.character(rep(c("Male","Female"),3)), 
       "2001" = c(10000,9000,15000,14000,17000,15000)) 

data$x2002 <- data$X2001 + 1000 

data 

data2 <- data.frame(Age = rep(data$Age,2), Gender = rep(data$Gender,2)) %>% arrange(Gender) %>% 
mutate(year = rep(c("2001", "2002"), each = 3, times = 2), rank = rep(seq(1,3), times = 4)) 


data2 <- data2 %>% mutate(N = c(9000,14000,15000, 10000,15000,16000, 10000, 15000, 17000, 11000, 16000, 18000)) 

data2 

Derzeit habe ich es in Excel mit viel manuellem Aufwand getan und suche nach einer einfacheren Lösung, wenn möglich.Wie kann ich diese Daten in R und nicht übertreffen

Antwort

2

Wir können es auf 'long' Format konvertieren mit gather, und führen Sie dann die Transformation

library(dplyr) 
library(tidyr) 
gather(data, year, N, X2001:x2002) %>% 
     mutate(year = as.numeric(substring(year, 2))) %>% 
     group_by(Gender, year) %>% 
     mutate(rank = dense_rank(N)) %>% 
     arrange(Gender, year, rank) 
#  Age Gender year  N rank 
# <fctr> <fctr> <dbl> <dbl> <int> 
#1  1-5 Female 2001 9000  1 
#2 6-10 Female 2001 14000  2 
#3 11-15 Female 2001 15000  3 
#4  1-5 Female 2002 10000  1 
#5 6-10 Female 2002 15000  2 
#6 11-15 Female 2002 16000  3 
#7  1-5 Male 2001 10000  1 
#8 6-10 Male 2001 15000  2 
#9 11-15 Male 2001 17000  3 
#10 1-5 Male 2002 11000  1 
#11 6-10 Male 2002 16000  2 
#12 11-15 Male 2002 18000  3 
+0

Dank. Obwohl ein paar Fragen. Wenn ich versuche, die Teilzeichenfolgefunktion zu testen, zum Beispiel für Teilzeichenfolge ("abcdef", 2). Ich bekomme einen Fehler, dass mir das Argument stop fehlt, warum ist in Ihrem Beispiel kein Stopp-Argument erforderlich? Nehmen wir an, ich habe zwei weitere Gruppen: "0-1" und "100+". Wie würde ich dann tun? – MLEN

+1

Tatsächlich liefert Teilzeichenfolge keinen Fehler – MLEN

+0

@ MLEN Es ist nur für 'substr' und nicht für' substring' – akrun

Verwandte Themen