2016-07-28 31 views
2
a = data.table(c(2,NA,3), c(5,NA,1)) 

fehlt Wenn ich versuche, über die fehlenden Zeilen zu interpolierenR data.table - wie interpoliert Werte über FIXED Zeilen in mehreren Spalten

a[, approx(x = 1:.N, y = .SD, xout = which(is.na(.SD))), .SDcols = 1:2] 

den folgenden Fehler gibt:

Error in xy.coords(x, y) : 'x' and 'y' lengths differ 

Ich möchte folgendes bekommen:

> a 
    V1 V2 
1: 2.0 5 
2: 2.5 3 
3: 3.0 1 
+1

können Sie 'na.approx()' nicht aus dem Zoo verwenden? – theArun

+0

Sie könnten die vollständige Spalte wie 'a [, Namen (a): = lapply (.SD, Funktion (z) approx (.I, z, xout = .I) $ y)]' natürlich, obwohl das könnte Beseitigen Sie den Zweck der Verwendung von data.table (die Bearbeitung eines Teils einer Spalte ermöglicht). Hinweis: '.I' ist der Vektor der Zeilennummern für die Tabelle. – Frank

Antwort

3

Es ist s eems wie x und y (erste zwei Argumente) sollten numerische Vektoren sein. Sie müssen jede Spalte durchlaufen. Hier verwende ich set() zusammen mit einem for-loop, um die Originaldaten zu aktualisieren. Tabelle durch Referenz.

len = 1:nrow(a) 
for (col in names(a)) { 
    nas = which(is.na(a[[col]])) 
    set(a, i=nas, j=col, value=approx(len, a[[col]], xout=nas)$y) 
} 
#  V1 V2 
# 1: 2.0 5 
# 2: 2.5 3 
# 3: 3.0 1 
+0

vielen Dank. Ich frage mich jedoch, ist nicht die ganze Idee von .SD die data.table-Syntax des Durchschleifens von Spalten (mit .SDcols, die welche Spalten angeben)? Irgendwie funktioniert na.approx() wo approx() nicht funktioniert. – Amitai