1
我的原始數據框顯示了幾個人(由Ring標識)在大約2周時間內對一個變量(動作,以秒爲單位)的更改。我的問題是這個變量延伸到日期的變化上(即在午夜),我想將它分成兩部分:從時間[i]直到午夜,從午夜直到時間[i + 1]。我已經增加了一些變數,我需要計算這兩個操作:如何在數據框中的可變位置插入行
- 修改第i行(日期更改只有在),所以[I]午夜
- 插入一個之前,我可以得到行動的一部分額外的行(僅當日期發生變化時)並將其分配給act [i]的另一部分。
例如:
ith row: 01-01-2000 23:55:00 act= 360 seconds
i+1th row: 02-01-2000 00:01:00 act= 30 seconds
i+2th row: 02-01-2000 00:01:30 act= 50 seconds
.
.
.
我的目標是獲得:
ith row: 01-01-2000 23:55:00 act= 300 seconds # modified row
i+1th row: 02-01-2000 00:00:00 act= 60 seconds # inserted row
i+2th row: 02-01-2000 00:01:00 act= 30 seconds # previously row i+1th
i+3th row: 02-01-2000 00:01:30 act= 30 seconds #previously row i+2th
.
.
.
在不同的時間段相關聯的每個單獨的(環)拉伸,數據從而導致日期改變在不被考慮的個人之間。 下面,選擇我〜90000行數據幀(XACT)的顯示範圍內與個人之間(環)日期的變化和未來我的代碼:
Ring time act wd date clock timepos timemn actmn jul
156 6106933 09/06/11 21:37:45 267 dry 09/06/11 21:37:45 2011-06-09 21:37:45 2011-06-10 8535 15134
157 6106933 09/06/11 21:42:12 3417 wet 09/06/11 21:42:12 2011-06-09 21:42:12 2011-06-10 8268 15134
158 6106933 09/06/11 22:39:09 51 dry 09/06/11 22:39:09 2011-06-09 22:39:09 2011-06-10 4851 15134
159 6106933 09/06/11 22:40:00 7317 wet 09/06/11 22:40:00 2011-06-09 22:40:00 2011-06-10 4800 15134
160 6106933 10/06/11 00:41:57 24 dry 10/06/11 00:41:57 2011-06-10 00:41:57 2011-06-11 83883 15135
529 6106933 11/06/11 22:41:57 3177 wet 11/06/11 22:41:57 2011-06-11 22:41:57 2011-06-12 4683 15136
530 6106933 11/06/11 23:34:54 6 dry 11/06/11 23:34:54 2011-06-11 23:34:54 2011-06-12 1506 15136
531 6106933 11/06/11 23:35:00 1779 wet 11/06/11 23:35:00 2011-06-11 23:35:00 2011-06-12 1500 15136
532 6106933 12/06/11 00:04:39 594 dry 12/06/11 00:04:39 2011-06-12 00:04:39 2011-06-13 86121 15137
533 6106933 12/06/11 00:14:33 18840 wet 12/06/11 00:14:33 2011-06-12 00:14:33 2011-06-13 85527 15137
7024 6134701 24/07/11 15:24:14 6 dry 24/07/11 15:24:14 2011-07-24 15:24:14 2011-07-25 30946 15179
7025 6134701 24/07/11 15:24:20 6 wet 24/07/11 15:24:20 2011-07-24 15:24:20 2011-07-25 30940 15179
7026 6134701 24/07/11 15:24:26 810 dry 24/07/11 15:24:26 2011-07-24 15:24:26 2011-07-25 30934 15179
R = unique(xact$Ring)
for (m in R) {
for (i in 1:nrow(xact)) {
if(xact$jul[i] < xact$jul[i+1]) {
# modify row i (jul= Julian date)
xact[i] <- c(xact$Ring[i], xact$time[i], xact$actmn[i], xact$wd[i], xact$date[i], xact$clock[i], xact$timepos[i], xact$timemn[i], xact$actmn[i], xact$jul[i])
# add new row between row i and row i+1
r <- i
newrow <- c(xact$Ring[i], xact$timemn[i], as.numeric(xact$timepos[i+1] - xact$timemn[i]), xact$wd[i], xact$date[i+1], xact$clock[i+1], xact$timemn[i], xact$timemn[i], xact$actmn[i], xact$jul[i+1])
insertRow <- function(xact, newrow, r) {
xact[seq(r+1, nrow(xact) + 1), ] <- xact[seq(r, nrow(xact)), ]
xact[r,] <- newrow
xact
}
}
}
}
我試着去適應現有的代碼但產生此消息:
我將不勝感激任何幫助。
桑蒂
你並不需要插入行。附加它們並對數據進行排序。你也可能不需要循環。如果您以某種方式提供數據,我們可以很容易地閱讀(使用'dput'),我們可以提出建議。 – Roland
@Roland你應該把它作爲(最好的:-))回答。只需創建一個矩陣(runif ....)例子,以便OP瞭解如何對他的數據框進行「排序」或「排序」。順便說一句,笨重的方法是'df < - rbind(df [1:j] ,newrowdata,df [j + 1:nrow(df)])' –
我已經出去了幾天了,對不起,沒有輸入,Carl是正確的,這裏是我的數據框的一部分壓縮: http ://www.megafileupload.com/en/file/419337/DF1001-zip.html –