Ich habe derzeit einen Datensatz mit Alter und CPUE. Ich muß eine Schleife bilden (oder eine anderen Code)Durchschleifen Quantile, um eindeutige Spalte in Datensatz
- Subset in einzigartige Daten der Datenrahmen
- für jeden eindeutigen Altersrahmen, den Perzentil-Wert von 10 bis 90 um 1% CPUE
- finden fügen jedes Perzentil CPUE Wert zu dem Datensatz (ob durch Alter von Alter oder identifiziert subsetted) als neue Spalte
- eine weitere Spalte hinzufügen, basierend auf der Schwelle CPUE, die zu einer ifelse Aussage ähnlich sein würde, wo die Spalte, die Sie, wenn die sagen würde, CPU-Schwelle wurde erreicht oder nicht.
Der Code, den ich bisher habe, ist nicht geschleift und sieht wie folgt aus:
#####subsetting for each age
yr1=ycsnew[which(ycsnew$age==1),]
yr2=ycsnew[which(ycsnew$age==2),]
yr3=ycsnew[which(ycsnew$age==3),]
yr4=ycsnew[which(ycsnew$age==4),]
yr5=ycsnew[which(ycsnew$age==5),]
yr6=ycsnew[which(ycsnew$age==6),]
yr7=ycsnew[which(ycsnew$age==7),]
####creating a vector using for example the 80th percentile (I would like
this to be continuous from 0.1 to 0.9 by 0.01)
q1=quantile(yr1$logcpueplus1,0.8)[[1]]
q2=quantile(yr2$logcpueplus1,0.8)[[1]]
q3=quantile(yr3$logcpueplus1,0.8)[[1]]
q4=quantile(yr4$logcpueplus1,0.8)[[1]]
q5=quantile(yr5$logcpueplus1,0.8)[[1]]
q6=quantile(yr6$logcpueplus1,0.8)[[1]]
q7=quantile(yr7$logcpueplus1,0.8)[[1]]
####using ifelse statement to create column for probability greater than
or equal to percentile value (pgtq8=ProbabilityGreaterThanQ80)
yr1$pgtq8=ifelse(yr1$logcpueplus1>=q1,1,0)
yr2$pgtq8=ifelse(yr2$logcpueplus1>=q2,1,0)
yr3$pgtq8=ifelse(yr3$logcpueplus1>=q3,1,0)
##then I ended up binding everything back together
ycsnew2=rbind(yr1,yr2,yr3,yr4,yr5,yr6,yr7)
ich den Prozess begann, mich von Looping und haben so weit gekommen:
###1 subset into different year datasets
age_split=split(ycsnew,ycsnew$age)
new_names <- c("one", "two", "three","four","five","six","seven")
for (i in 1:length(age_split)) {
assign(new_names[i], age_split[[i]])
}
###for each age, loop through to get values for 0.1-0.9 by0.01
N=(seq(0.1,0.9,0.01))
one_percentiles=matrix(rep("puppy",81),nrow=81,ncol=1)
sequence1=c(seq(0.1,0.9,0.01))
for(n in unique(seq(1,81,1))){
for(i in sequence1){
ps=quantile(one$logcpueplus1,i)[[1]]
one_percentiles[[n]]=ps
}
}
I Ich stehe jetzt fest, weil der "i" -Wert das Objekt "sequenz1" nicht korrekt durchläuft und ich einfach eine Matrix "one_percentiles" mit dem Quantilwert für nur i = 0.1 oder i = 0.9 erhält.
Ich werde auf jeden Fall ratlos sein, wenn ich die ifelse() -Anweisung durch eine Schleife auf den Datensatz als neue Spalte hinzufügen werde, so dass jede Einsicht sehr geschätzt wird.
Mein Datensatz ist unten.
logcpueplus1 age
1 0.13353139 7
2 0.13353139 6
3 0.06899287 2
4 0.08004271 1
5 0.13353139 6
6 0.06899287 7
7 0.04879016 4
8 0.04879016 4
9 0.13353139 7
10 0.06899287 7
12 0.06899287 6
13 0.06899287 2
14 0.06899287 2
15 0.06899287 7
16 0.06899287 6
17 0.09531018 4
21 0.13353139 7
22 0.18232156 4
24 0.04879016 4
25 0.09531018 4
26 0.06899287 2
28 0.06899287 7
30 0.04879016 4
37 0.08004271 1
39 0.04879016 4
40 0.08004271 1
41 0.13353139 6
42 0.25131443 6
43 0.13353139 7
44 0.04879016 4
47 0.08004271 1
49 0.04879016 4
50 0.13353139 5
52 0.19415601 6
53 0.13353139 7
54 0.19415601 6
55 0.30538165 5
56 0.04879016 3
57 0.06899287 1
59 0.06899287 6
60 0.35667494 5
61 0.09531018 3
63 0.19415601 6
64 0.25131443 5
65 0.09531018 3
66 0.06899287 6
67 0.19415601 6
69 0.06899287 1
70 0.13976194 3
71 0.13353139 5
73 0.04879016 3
77 0.06899287 6
78 0.04879016 3
79 0.06899287 7
Ich verfolge nicht all Ihre Perzentils Zeug. Können Sie einen einzelnen Wert von "Alter" wählen, sagen "Alter = 1", und zeigen Sie das Ergebnis, das Sie für dieses Alter wollen? – Gregor