Ich möchte alle Nullen in den Matrizen einer Liste in NAs konvertieren. Ich habe einen Weg gefunden, wie ich diese Aufgabe erfüllen kann. Es ist jedoch zu komplex und ich denke, dass es einen einfachen Weg geben sollte, wie es gemacht wird. Hier einige Beispieldaten:R: Einfacher Weg, um 0s in der Liste der Matrizen in NAs zu ändern?
ABlue <- list("111.2012"=matrix(c(1, 0, 6, 0, 1, 0),
nrow = 1, byrow = T),
"112.2012"=matrix(c(6, 2, 2, 0, 3, 1),
nrow = 1, byrow = T),
"111.2011"=matrix(c(3, 2, 0, 0, 1, 9),
nrow = 1, byrow = T),
"112.2011"=matrix(c(1, 2, 0, 0, 7, 0),
nrow = 1, byrow = T))
CNTRYs <- c("USA", "GER", "UK", "IT", "CND", "FRA")
ABlue <- lapply(ABlue , "colnames<-", CNTRYs) # gets names from Country list
Wichtig ist, dass die ursprünglichen Matrizen haben bereits Ländernamen wie COLNAMES, so wäre es schön, mit dieser Liste (ablue) übereinstimmen.
Hier ist die Art, wie ich bis jetzt verwenden:
ABlue.df<-data.frame(do.call("rbind",ABlue)) # two step approach to replace 0 with NA according to: "http://stackoverflow.com/questions/22870198/is-there-a-more-efficient-way-to-replace-null-with-na-in-a-list"
ABlue.df.withNA <- sapply(ABlue.df, function(x) ifelse(x == 0, NA, x))
ABlueNA <- split(ABlue.df.withNA, 1:NROW(ABlue.df.withNA)) # is again a list (of vectors)
names(ABlueNA) <- names(ABlue) # list with old names
ABlueNAdf <- lapply(ABlueNA, function(x) as.data.frame(x)) # turned into list of dfs of one column
ABlueNAdfT <- lapply(ABlueNAdf, function(x) t(x)) # transponed to list of dfs of one row and 206 cols
ABlueNAdfTnam <- lapply(ABlueNAdfT , "colnames<-", CNTRYs) # gets names from Country list
ABlueNAdfTnam <- lapply(ABlueNAdfTnam , "rownames<-", 1:NROW(ABlueNAdfTnam[1]))
ABlue2 <- ABlueNAdfTnam
Ideen, wie Linien und Komplexität zu reduzieren? Danke
Edit: Ich möchte die gleiche Struktur wie in den ursprünglichen Daten haben!
das ist im Grunde genommen "lapply (ABlue, Funktion (x) {x [x == 0] <- NA; x})". – Roland
Das ist einfach, danke. Ich liebe SO :) –
@ N.Varela, kein Problem. Vielen Dank, dass Sie ein reproduzierbares Beispiel gepostet und Ihre bereits gemachten Versuche gezeigt haben. – A5C1D2H2I1M1N2O1R2T1