2017-08-25 3 views
1

Ich versuche, das Verhältnis der Tiere zu einem Stadium ihrer Entwicklung in einer bestimmten Zeit in Tagen zu bestimmen. Ich habe die Tage, an denen die Tiere diese Entwicklungsstufe erreichen.wie Entwicklungsrate Tabelle in R zu bestimmen?

X<-filter(sort_delays, Treatment=="Control")%>%select('W-L5') 

Dies ist X:

X <- data.frame(W.L5 = c(6L, 6L, 6L, 6L, 7L, 5L, 6L, 6L, 7L, 6L, 6L, 6L, 6L, 6L, 6L, 
    7L, 5L, 6L, 6L, 6L, 5L, 5L, 5L, 6L, 6L)) 

Dann habe ich einen Datenrahmen mit den Spalten ich brauche, ein die verschiedenen Tage, an denen enthalten, meine Tiere entwickeln können und andere, die zur Eingabe von Daten erforderlich berechnen das Verhältnis

Days<-c(4:9) 
number<-NA 
Percent<-NA 
Total_percent<-NA 
df<-data.frame(Days, number, Percent, Total_percent) 

dann meinen Datenrahmen ich mit dem folgenden Code bevölkerte:

#now start populating the number column 
df[1,2]<- length(which(X==df[1,1])) 
df[2,2]<- length(which(X==df[2,1])) 
df[3,2]<- length(which(X==df[3,1])) 
df[4,2]<- length(which(X==df[4,1])) 
df[5,2]<- length(which(X==df[5,1])) 
df[6,2]<- length(which(X==df[6,1])) 

#use number to figure out percent 
df$Percent<-(df$number/length(X[,1]))*100 

#use percent to determine the total percentage 
df[1,4]<- df[1,3] 
df[2,4]<- df[2,3]+df[1,4] 
df[3,4]<- df[3,3]+df[2,4] 
df[4,4]<- df[4,3]+df[3,4] 
df[5,4]<- df[5,3]+df[4,4] 
df[5,4]<- df[6,3]+df[5,4] 

die resultierende df sieht dann wie folgt aus:

Days number Percent Total_percent 
1 4  0  0    0 
2 5  5  20   20 
3 6  17  68   88 
4 7  3  12   100 
5 8  0  0   100 
6 9  0  0   100 

obwohl dies ganz gut funktioniert hat den Tisch Ich möchte zu erstellen, werde ich schließlich mit größeren Datensätzen und mehr Variation in den Tagen arbeiten werden, was zu mehr Zeilen in meinem 'df' führt, was zu enormen Codemengen führt.

Ich fragte mich, ob jemand einen besseren Weg weiß, dies zu tun?

+0

'#use Prozent der Gesamt percentage' um zu bestimmen, kann sein wie folgt: 'df [, 4] <- cumsum (df [, 3])' – Masoud

+0

'#now fängt an, die Zahlenspalte zu füllen' dies kann gemacht werden: 'df [, 2] <- lapply (df [, 1 ], Funktion (y) Länge (welche (X == y))) – Masoud

Antwort

1

Wir haben nicht sort_delays aber X die richtige Ausgabe unter Berücksichtigung dann:

X<-filter(sort_delays, Treatment=="Control")%>%select('W-L5') 

df<-data.frame(Days=c(4:9)) 

df$number <- unlist(lapply(df$Days, function(y) length(which(X==y)))) 

df$Percent<-(df$number/length(X[,1]))*100     

df$Total_percent <- cumsum(df$Percent) 

Dies wird das gewünschte Ergebnis geben:

df 
## Days number Percent Total_percent 
## 1 4  0  0    0 
## 2 5  5  20   20 
## 3 6  17  68   88 
## 4 7  3  12   100 
## 5 8  0  0   100 
## 6 9  0  0   100 
Verwandte Themen