2016-04-05 11 views
0

Ich würde gerne wissen, wie man das Thema auf 4 verschiedene Bereiche/Ebene zu teilen. Jedes Level hat einen bestimmten Bereich. Das Folgende sind die Daten.Teilen von Daten auf der Grundlage der Bereiche in R

Std Name Subject Percentage 
    2 Vinay eng  50 
    2 Vinay math  60 
    2 Vinay hindi 70 
    2 Rohan eng  70 
    2 vas  mat  50 
    2 dheer eng  35 
    2 dheer math  90 
    2 dheer hindi 80 
    2 Bhas eng  90 
    2 Bhas math  35 
    2 Bhas hindi 50 

Die vier Bucket-Bereiche sind wie folgt. < = 35, 35-50, 50-75,> 75

Erwartete Ausgabe:

Std Subject 0-35 35-50 50-75 >75 
2 Eng  25% 25% 25% 25% 
2 Mat  25% 25% 25% 25% 
2 Hin  0% 25% 25% 25% 

P. S Werte der Bereiche sind Prozentsatz der Schüler in diesem Bereich erzielt.

Vielen Dank im Voraus

+0

wäre gut, ein Baby zu haben Code, um die verwendeten Daten zu reproduzieren. –

+0

@ M.D die Daten selbst ist eine Rohdaten. – Ram

Antwort

0

Eine mögliche data.table Lösung:

library(data.table) 

dat <- data.table(Std = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), 
        Name = c("Vinay", "Vinay", "Vinay", "Rohan", "vas", "dheer", "dheer", "dheer", "Bhas", "Bhas", "Bhas"), 
        Subject = c("eng", "math", "hindi", "eng", "mat", "eng", "math", "hindi", "eng", "math", "hindi"), 
        Percentage = c(50L, 60L, 70L, 70L, 50L, 35L, 90L, 80L, 90L, 35L, 50L)) 

dat[, PCTs := cut(Percentage, 
        breaks = c(0, 35, 50, 75, 100), 
        include.lowest = TRUE)] 

res <- dat[, list(
       "0-35" = sum(PCTs == "[0,35]")/.N * 100, 
       "35-50" = sum(PCTs == "(35,50]")/.N * 100, 
       "50-75" = sum(PCTs == "(50,75]")/.N * 100, 
       ">75" = sum(PCTs == "(75,100]")/.N * 100 
      ), 
      by = c("Std", "Subject")] 

print(res, digits = 2) 
+0

Danke für die Lösung, Aber wenn ich 500 Datensätze als dies habe, ist es schwierig, in der data.table zu codieren, Importieren einer Datei wäre die Option, versucht mit dat <-read.csv (file.choose()), aber Es hat nicht funktioniert. Kannst du mir bitte sagen, wie es geht? – Ram

+0

Der obige Code geht davon aus, dass eine 'data.table' verwendet wird, also entweder' as.data.table (yourObject) 'oder die' fread() 'Funktion aus dem' data.table' Paket. –

+0

Danke @ M.D, Es hat funktioniert – Ram

0

Dies sollte, vielleicht ein wenig mehr Arbeit für die Formatierung arbeiten:

df<-read.table(header = TRUE, sep=",", text="Std, Name, Subject, Percentage 
       2, Vinay,eng,  50 
       2, Vinay,math,  60 
       2, Vinay,hindi, 70 
       2, Rohan,eng,  70 
       2, vas,math,  50 
       2, dheer,eng,  35 
       2, dheer,math, 90 
       2, dheer,hindi, 80 
       2, Bhas,eng,  90 
       2, Bhas,math,  35 
       2, Bhas,hindi, 50") 

breaks<-c(0, 35, 50, 75, 100) 
t<-table(df$Subject, responseName=cut(df$Percentage, breaks = breaks)) 
format(t/rowSums(t), digits=3) 
+0

Danke für die Antwort, hier, da die Std ist das gleiche über alle die Datensätze, die es zeigt Gruppe, Was ist, wenn Standards unterscheiden, wo nach Klausel im Code enthalten? – Ram