我有一個數據集,其中包含累積時間用於填寫websurvey的變量(每個變量對應一頁該調查)。我需要顯示的變量不是累計時間,而是僅顯示在該頁面上的時間。不幸的是,由於調查表中有過濾器,由於頁面被過濾,一些變量有NA
。從列中減去第一列的數值,而不是數據返回的數據。框架
下面是一些示例數據(第一變量可以被看作是一個基準,不包括任何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
這裏有一個dput()爲您一起工作:
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")
預期的輸出如下所示。請注意,變量不一定要被替換,我對新生成的變量完全沒問題。
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
之前,我與NA
注意到這個問題,我用
for (i in 2:10) {
df1[paste0("t_", i)] <- df1[i]-df1[i-1]
}
產生與時間減去新變量。顯然,這在有時會使用NA
值時不起作用。
考慮到NA
按情況發生,新方法必須循環遍歷行和的行。說實話,我甚至不知道如何從這裏開始。任何人都可以指出我如何實現這一目標的方向?我很樂意提供一些關於我可以自己做具體細節的一般建議。
編輯:爲了澄清,我需要的輸出只是該值與第一個非值的差值 - NA
- 在該行之前出現的值。
你能顯示預期的輸出 – akrun
我已經編輯預期的輸出到問題中。 – LAP