2017-06-11 3 views
1

Ich möchte einen leeren Datenrahmen und später Zeilenwerte hinzufügen. Die Art, wie ich einen Datenrahmen erstellen, ist der folgende:NA-Werte in einen Datenrahmen einfügen R

result_df <- data.frame("Hospital" = character(), "State" = character(), stringsAsFactors = FALSE) 

Dann füge ich die erste Zeile:

result_df <- rbind(result_df, list("D W MCMILLAN MEMORIAL HOSPITAL", "AL")) 

Genau wie zusätzliche Informationen, die ich Ihnen zeigen, das Ergebnis des folgenden Befehls ein:

str(result_df) 

'data.frame': 1 obs. of 2 variables: 
$ X.D.W.MCMILLAN.MEMORIAL.HOSPITAL.: Factor w/ 1 level "D W MCMILLAN MEMORIAL HOSPITAL": 1 
$ X.AL.       : Factor w/ 1 level "AL": 1 

Dann füge I, die nächste Zeile zu dem Datenrahmen

result_df <- rbind(result_df, list("ARKANSAS METHODIST MEDICAL CENTER", "TX")) 

und das ist, was ich bekommen:

Warning messages: 
1: In `[<-.factor`(`*tmp*`, ri, value = "ARKANSAS METHODIST MEDICAL CENTER") : 
    invalid factor level, NA generated 
2: In `[<-.factor`(`*tmp*`, ri, value = "TX") : 
    invalid factor level, NA generated 

Wenn ich tippe result_df den Inhalt des Datenrahmens zu sehen, das ist das Ergebnis:

X.D.W.MCMILLAN.MEMORIAL.HOSPITAL. X.AL. 
1 D W MCMILLAN MEMORIAL HOSPITAL AL 
2        <NA> <NA> 

Ich denke, das mit stringAsFactors gelöst werden konnte = FALSE Hat jemand eine Vorstellung von diesem Problem?

+1

Verwenden Sie keine 'rbind' um Zeilen hinzuzufügen. Sie sollten die Größe Ihres 'dat.frame' vordefinieren und die Zeilenindizes verwenden, um sie zu füllen. Im Worst-Case-Szenario können Sie einfach Zeilen mit Indizes hinzufügen, z. B. 'result_df [1,] <- c (" DW MCMILLAN MEMORIAL HOSPITAL "," AL ")' und 'result_df [2,] <- c (" ARKANSAS METHODIST MEDIZINISCHES ZENTRUM "," TX ")'. Aber dann wird dies eine tiefe Kopie machen, stattdessen ist es immer besser, die Größe Ihres Datenrahmens a priori vorzugeben. –

Antwort

0

Die Funktion rbind muss die gleichen Spaltennamen haben. Wenn Sie den Datenrahmen mit den gleichen Spaltennamen erstellt haben, können Sie diese Datenrahmen ohne NA kombinieren.

result_df <- rbind(result_df, data.frame(Hospital = "D W MCMILLAN MEMORIAL HOSPITAL", 
             state = "AL", 
             stringsAsFactors = FALSE)) 

result_df <- rbind(result_df, data.frame(Hospital = "ARKANSAS METHODIST MEDICAL CENTER", 
             state = "TX", 
             stringsAsFactors = FALSE)) 

Hier ist der endgültige Ausgang.

print(result_df) 
          Hospital state 
1 D W MCMILLAN MEMORIAL HOSPITAL AL 
2 ARKANSAS METHODIST MEDICAL CENTER TX 
+0

Nicht sicher der Grund des Downvite. Bitte geben Sie an, warum diese Antwort nicht ausreicht. – www

+1

Ich habe auch ein DV dafür. Nicht sicher, aber warum ist es dved – akrun

+0

Great !!, Vielen Dank !!, das hat mein Problem gelöst. –

0

Wir verwenden rbindlist von data.table

library(data.table) 
rbindlist(list(result_df, list("D W MCMILLAN MEMORIAL HOSPITAL", "AL"))) 
#       Hospital State 
#1: D W MCMILLAN MEMORIAL HOSPITAL AL 
Verwandte Themen