2016-06-03 10 views
1

Hier ist ein Beispiel dafür, wie meine Daten wie folgt aussieht:in einer Spalte über Funktion NA-Werte Anwendung auf Werte in einer anderen Spalte

pupilsize <- c(500, 400, NA, NA, 100, 600, 500, NA, NA, NA, 500) 
rlelength <- c(4,4,2,2,6,6,6,90,90,90,50) 
data <- data.frame(cbind(pupilsize,rlelength)) 

ich die na.approx Funktion auf den Brocken NA-Wert anwenden möchten in Daten $ pupilsize nur, wenn die Anzahl der Daten $ rlelength kleiner als 86.

das Endergebnis

data$pupilsize 
[1] 500 400 300 200 100 600 500 NA NA NA 500 

sein sollte ich bin Ich habe eine Menge Probleme damit, das Stück der NA Werte zu segmentieren, die ich will. Jede Hilfe wird sehr geschätzt!

Antwort

2

Wir ifelse

data$pupilsize <- with(data, ifelse(rlelength< 86, na.approx(pupilsize), pupilsize)) 
data$pupilsize 
#[1] 500 400 300 200 100 600 500 NA NA NA 500 

Oder

i1 <- data$rlelength < 86 
data$pupilsize[i1] <- na.approx(data$pupilsize[i1]) 

Oder wir können für Effizienz data.table Methoden verwenden.

library(data.table) 
setDT(data)[rlelength < 86, pupilsize := na.approx(pupilsize)]