ich bearbeiten diese Frage (hoffentlich nach Wunsch)R eine ifelse Aussage zu jeder Zelle eines data.frame Anwendung
Ich brauche jede Zelle eines data.frame zu überprüfen, ob es Wert ist in bestimmtem Bereich liegt. Ich bin sehr neu zu bewerben und muss daran arbeiten, es zu verstehen.
Ich habe 2 data.frames:
blood_df
: 158 Spalten,stat_df
: Statistiken für jede Spalte vonblood_df
Beigefügt ist ein minimal Beispiel zur Erläuterung :
bisher habe ich das, aber es berechnet das gleiche Ergebnis für jede Zelle.
c0 <- c(0,0,0,0)
c1 <- c(1,2,3,4)
c2 <- c(5,6,7,8)
c3 <- c(9,10,11,12)
c4 <- c(13,14,15,16)
blood_df <- data.frame(c0,c1,c2,c3,c4)
stat_df <- data.frame(matrix(ncol = 5, nrow = 6))
colnames(stat_df) <- colnames(blood_df)
rownames(stat_df) <- c("Mean","3*sd","sum", "Mean2","-3*sd","sum2")
stat_df[1,2:5] <-apply(blood_df[,2:5], 2, mean, na.rm = TRUE)
stat_df[2,2:5] <-apply(blood_df[1:4,2:5], 2, function(x) 3*sd(x,na.rm=TRUE))
stat_df[3,] <-colSums(stat_df[1:2,])
stat_df[4,2:5] <-apply(blood_df[,2:5], 2, mean, na.rm = TRUE)
stat_df[5,2:5] <-apply(blood_df[1:4,2:5], 2, function(x) -3*sd(x,na.rm=TRUE))
stat_df[6,] <-colSums(stat_df[4:5,])
blood_df:
## c0 c1 c2 c3 c4
## 1 0 1 5 9 13
## 2 0 2 6 10 14
## 3 0 3 7 11 15
## 4 0 4 8 12 16
stat_df:
## c0 c1 c2 c3 c4
## Mean NA 2.500000 6.500000 10.500000 14.500000
## 3*sd NA 3.872983 3.872983 3.872983 3.872983
## sum NA 6.372983 10.372983 14.372983 18.372983
## Mean2 NA 2.500000 6.500000 10.500000 14.500000
## -3*sd NA -3.872983 -3.872983 -3.872983 -3.872983
## sum2 NA -1.372983 2.627017 6.627017 10.627017
der Teil, der nicht funktioniert, wie ich es brauche:
blood_df[1:4,2:5] <- apply(blood_df[,2:5],2, function(x)
(ifelse((x > (stat_df[3,2:5]))||
(x < (stat_df[6,2:5])), NA, x)))
es mir Bisher gibt:
blood_df:
## c0 c1 c2 c3 c4
## 1 0 1 1 1 1
## 2 0 5 5 5 5
## 3 0 NA NA NA NA
## 4 0 NA NA NA NA
Was ich ist erhalten möchten: (zu überprüfen wenn jeder Wert zwischen einem bestimmten Bereich liegt)
blood_df:
## c0 c1 c2 c3 c4
## 1 0 1 5 9 13
## 2 0 2 6 10 14
## 3 0 3 7 11 15
## 4 0 4 8 12 16
Wenn Es liegt nicht im Bereich, der Wert sollte sich in NA ändern.
Danke!
Können Sie uns ein repro Beispiel nennen? Dies würde die Beantwortung der Frage erleichtern. :) –
Und bitte auch ein Beispiel für die gewünschte Ausgabe hinzufügen. – ekstroem
[Info, wie man ein reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap