2017-09-21 2 views
1

I 31 Datenrahmen in r von DF1wie auf mehreren Datenrahmen in r anwenden dcast

df1 

make type qty 

df2 

make type qty 
abc def  10 
dde ert  3 

df3 

make type qty 
rty r45  78 

DF31 habe ich möchte es dcast zu folgenden

make type qty make_1 type_1 qty_1 
NA  NA  NA  NA  NA  NA  
abc def  10  dde  ert  3 
rty r45  78  NA  NA  NA 

Wie kann ich es tun für alle Datenrahmen zusammen in r?

Dies ist meine Datenrahmen Struktur

dput(dredge_cutter1) 
    structure(list(Make = character(0), Type = character(0), Qty. = 
    numeric(0)), .Names = c("Make", 
    "Type", "Qty."), row.names = integer(0), class = "data.frame") 
    > dput(dredge_cutter5) 
    structure(list(Make = "SHRIYAM", Type = "FLARRED", Qty. = 3), .Names = 
    c("Make", 
    "Type", "Qty."), row.names = 2L, class = "data.frame") 
    > dput(dredge_cutter23) 
    structure(list(Make = c("SHRIYAM", "SHRIYAM"), Type = c("FLARED", 
    "CHISEL POINT"), Qty. = c(15, 2)), .Names = c("Make", "Type", 
    "Qty."), row.names = 2:3, class = "data.frame") 
+0

Die erste Datenmenge ist nicht klar. Ist es ein Vektor oder ein data.frame mit 0 Zeilen? – akrun

+0

@ es ist ein leerer Datenrahmen. mit null Zeilen – Neil

+1

Bitte bearbeiten Sie Ihren Beitrag mit dput-Ausgabe, so dass wir die Struktur kennen – akrun

Antwort

0

Eine Option wäre

library(data.table) 
res <- rbindlist(lapply(mget(paste0("df", 1:3)), function(x) { 
    x <- if(nrow(x)==0) data.frame(setNames(replicate(3, NA, simplify = FALSE), 
     names(x))) else x 
    dcast(as.data.table(x)[, n := seq_len(.N)], 
      1~n, value.var = c("Make", "Type", "Qty."))}), 
      fill = TRUE)[,-1, with = FALSE] 


setnames(res, make.unique(sub("_\\d+", "", names(res)), sep="_"))[] 
#  Make Type Qty. Make_1  Type_1 Qty._1 
#1:  NA  NA NA  NA   NA  NA 
#2: SHRIYAM FLARRED 3  NA   NA  NA 
#3: SHRIYAM FLARED 15 SHRIYAM CHISEL POINT  2 
+0

Ich bekomme folgenden Fehler, wenn ich über Code laufen .. 'Fehler: value.var (maketypeqty) nicht in der Eingabe gefunden Zusätzlich: Warnmeldung: In if (! (value.var% in% namen (data))) {: die Bedingung hat Länge> 1 und nur das erste Element wird verwendet ' – Neil

+0

@Neil Ich habe Ihre 'df1' als' df1 <- data.frame (make = Zeichen (0), Typ = Zeichen (0), Menge = numerisch (0), stringsAsFactors = FALSE) ' – akrun

+0

' Fehler in value_vars (Wert. var, names (data)): value.var-Werte [c ("make", "type", "qty"), NULL, NULL] werden in 'data' nicht gefunden. – Neil

Verwandte Themen