Ich endete mit einer großen data.table und ich möchte eine Funktion pro Zeile anwenden. Es funktioniert mit data.frame und apply, aber ich möchte eine Lösung mit data.table bekommen.Wenden Sie eine Funktion zeilenweise auf eine data.table
>sdata
Z_2016_11 Z_2016_10 Z_2016_09 Z_2016_08 Z_2016_07
1: 21 32 15 NA NA
2: 6 17 NA NA NA
3: 2 7 9 230 NA
4: 5 19 28 30 0
5: 16 29 30 105 0
6: 2 0 0 0 NA
Ich möchte es bestellen, wie folgend
>sdata
Z_1 Z_2 Z_3 Z_4 Z_5
1: 15 32 21 NA NA
2: 17 6 NA NA NA
3: 230 9 7 2 NA
4: 0 30 28 19 5
5: 0 105 30 29 16
6: 0 0 0 2 NA
Mit einem data.frame I
t(apply(sdata[, grep("Z", names(sdata), value = TRUE),with=FALSE],1,
function(tmp) c(rev(tmp[!is.na(tmp)]),
rep(NA, times = length(tmp) - length(tmp[!is.na(tmp)])))))
Ich versuchte es die folgende Art und Weise
trimt <- function(tmp){
c(rev(tmp[!is.na(tmp)]), rep(NA, times = length(tmp) - length(tmp[!is.na(tmp)])))
}
sdata[,trimt(get(grep("Z", names(sdata), value = TRUE))),by=1:nrow(sdata)]
So können Ich kann es leicht bestellen, aber nur ein Vektor kehrt zurück. Ist es möglich, eine data.table ähnlich wie apply zu verwenden und eine neue Matrix zurückzugeben?
Für die erste Reihe, warum Sie 15 32 21 tun haben, ist die Reihenfolge nicht richtig‘ – akrun
Ich möchte die nationalen Agenturen entfernen, dann umgekehrt den Rest der Zeile und fügen Sie NAs für die fehlenden Werte hinzu und ersetzen Sie die Zeile. – Frank123
Eine Lösung basierend auf data.table geschrieben – akrun