Ich habe einen Datensatz mit Variablen der kumulativen Zeit, die ich für das Ausfüllen einer Websurvey aufgewendet habe (jede Variable entspricht einer Seite von die Umfrage). Ich brauche die Variablen, um nicht die kumulative Zeit anzuzeigen, sondern die Zeit, die nur auf dieser Seite verbracht wird. Da im Fragebogen Filter vorhanden sind, haben einige Variablen NA
, da die Seiten gefiltert werden.Den Wert der ersten Spalte, die nicht NA ist, von der Spalte subtrahieren.
Hier einige Beispieldaten (die erste Variable kann als Basis betrachtet werden und enthält keine NA
):
rts5032939 rts5032955 rts5032973 rts5032974 rts5032975 rts5032977 rts5032978 rts5032979 rts5033085 rts5033089
1 70 99 NA 104 111 119 132 147 175 196
3 33 144 NA 156 165 NA 199 259 297 357
15 18 57 NA 63 69 80 99 174 190 221
20 2107 2126 NA 2131 2139 2209 2220 2236 NA 2274
24 1088 1111 NA 1117 1124 1133 1152 NA 1208 1228
30 27 61 NA 70 83 90 182 230 298 336
Hier ist ein dput() für Sie, mit arbeiten:
test <- structure(list(rts5032939 = c(70, 33, 18, 2107, 1088, 27), rts5032955 = c(99,
144, 57, 2126, 1111, 61), rts5032973 = c(NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_), rts5032974 = c(104,
156, 63, 2131, 1117, 70), rts5032975 = c(111, 165, 69, 2139,
1124, 83), rts5032977 = c(119, NA_real_, 80, 2209, 1133, 90), rts5032978 = c(132,
199, 99, 2220, 1152, 182), rts5032979 = c(147, 259, 174, 2236,
NA_real_, 230), rts5033085 = c(175, 297, 190, NA_real_, 1208, 298), rts5033089 = c(196,
357, 221, 2274, 1228, 336)), .Names = c("rts5032939", "rts5032955",
"rts5032973", "rts5032974", "rts5032975", "rts5032977", "rts5032978",
"rts5032979", "rts5033085", "rts5033089"), row.names = c(1L,
3L, 15L, 20L, 24L, 30L), class = "data.frame")
Die erwartete Ausgabe sieht so aus. Beachten Sie, dass die Variablen nicht ersetzt werden müssen, ich bin völlig in Ordnung mit neu generierten Variablen.
rts5032939 rts5032955 rts5032973 rts5032974 rts5032975 rts5032977 rts5032978 rts5032979 rts5033085 rts5033089
1 70 29 NA 5 7 8 13 15 28 21
3 33 111 NA 12 9 NA 34 60 38 60
15 18 39 NA 6 6 11 19 75 16 31
20 2107 19 NA 5 8 70 11 16 NA 38
24 1088 23 NA 6 7 9 19 NA 56 20
30 27 34 NA 9 13 7 92 48 68 38
Bevor ich das Problem mit den NA
bemerkt, habe ich
for (i in 2:10) {
df1[paste0("t_", i)] <- df1[i]-df1[i-1]
}
neue Variablen mit der subtrahierten Zeit zu erzeugen. Offensichtlich funktioniert das nicht, wenn manchmal ein -Wert verwendet wird.
In Anbetracht der Tatsache, dass die NA
von Fall zu Fall passiert, muss der neue Ansatz durch die Spalten und die Zeilen durchlaufen. Um ehrlich zu sein, bin ich mir nicht sicher, wie ich hier anfangen soll. Kann mir jemand auf die Richtung hinweisen, wie dies erreicht werden kann? Ich würde mich über einen allgemeinen Rat freuen, von dem ich die Details selbst machen könnte.
Edit: Um zu verdeutlichen, brauche ich den Ausgang, um nur die Differenz zwischen dem Wert und dem Wert des ersten nicht -Wertes, der in dieser Zeile vorkommt, zu sein.
Können Sie zeigen die erwartete Ausgabe – akrun
Ich habe bearbeitet die erwartete Ausgabe in die Frage. – LAP