2016-06-03 7 views
0

Ich versuche, einige Webdaten zu extrahieren und in einen Datenrahmen für zukünftige Verwendung zu bringen. Einige der Werte in einigen Spalten sind NA; Ich hätte gerne, dass diese Zellen NA oder etwas Text haben. Hier ist die for-Schleife Ich arbeite mit:Ersatzlänge Null R

extra <- as.data.frame(matrix(NA, nrow = length(main.node), ncol = 2)) 
    for (i in 1:length(main.node)){ 
     extra[i,1] <- main.node[[i]]$data$author 
     extra[i,2] <- main.node[[i]]$data$author_flair_text 
     } 

Das Problem ist, dass einige Werte von author_flair_text nicht vorhanden sind (der Autor Spalte funktioniert gut). Beispielsweise ruft main.node[[4]]$data$author_flair_textNULL zurück.

Ich erhalte den Fehler

Error in `[<-.data.frame`(`*tmp*`, i, 2, value = NULL) : 
    replacement has length zero 

Grundsätzlich muss ich die for-Schleife in fehlenden Informationen zu füllen. Gibt es eine Möglichkeit, innerhalb der for-Schleife NULL in "NULL" zu konvertieren?

Falls dies hilft, hier, wo main.node herkommt:

raw_data = tryCatch(RJSONIO::fromJSON(readLines(URL, warn = FALSE)), 
         error = function(e) NULL) 
main.node = raw_data[[2]]$data$children 

Dank !!

+1

Verwenden Sie eine 'if' Anweisung, mit' is.null' zu bestimmen, ob der Wert 'NULL' – mrip

Antwort

1

Versuchen Sie dies. Warnung ich es nicht lief, schrieb ich es nur so ein Tippfehler sein kann:

extra <- as.data.frame(matrix(NA, nrow = length(main.node), ncol = 2)) 
for (i in 1:length(main.node)){ 
    extra[i,1] <- main.node[[i]]$data$author 
    temp <- main.node[[i]]$data$author_flair_text 
    if(is.null(temp)){ 
    temp <- "NULL" 
    } 
    extra[i,2] <- temp 
} 
+0

Dank !! Das funktioniert perfekt. –

0

Sie können hier ifelse() Konstrukt verwenden. Es hat ein test Argument (für die Bedingung), ein yes Argument (der Wert, wenn der Test wahr ist) und ein no Argument (der Wert, wenn der Test falsch ist).

In Ihrem Fall wird es in etwa so aussehen:

temp <- main.node[[i]]$data$author_flair_text 
extra[i,2] <- ifelse(is.null(temp), "your_null_indicator", temp) 
Verwandte Themen