Hai, saya baru mengenal sintaks tabel data di R (dan R secara umum) dan memerlukan bantuan untuk mengulang baris tertentu dan secara bertahap meningkatkannya berdasarkan kategori.
Informasi tabel data tiruan saya ada di bawah:
> head(dt)
Time Values1 Values2 Values3 Category
1: 00:15:00 1 2 1.5 A
2: 00:30:00 3 4 2.5 A
3: 00:45:00 5 6 3.5 A
4: 01:00:00 7 8 4.5 A
5: 01:15:00 9 10 5.5 A
6: 01:30:00 11 12 6.5 A
> tail(dt)
Time Values1 Values2 Values3 Category
1: 22:45:00 182 181 92.5 B
2: 23:00:00 184 183 93.5 B
3: 23:15:00 186 185 94.5 B
4: 23:30:00 188 187 95.5 B
5: 23:45:00 190 189 96.5 B
6: 00:00:00 192 191 97.5 B
> str(dt)
Classes ‘data.table’ and 'data.frame': 192 obs. of 5 variables:
$ Time :Class 'ITime' int [1:192] 900 1800 2700 3600 4500 5400 6300 7200 8100 9000 ...
$ Values1 : int 1 3 5 7 9 11 13 15 17 19 ...
$ Values2 : int 2 4 6 8 10 12 14 16 18 20 ...
$ Values3 : num 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5 ...
$ Category: chr "A" "A" "A" "A" ...
- attr(*, ".internal.selfref")=<externalptr>
Jika Kategorinya adalah A, saya ingin mengekstrapolasi setiap nilai (disorot kuning) di kolom Waktu menjadi satu menit sementara kolom lainnya masih memiliki nilai yang sama. Perhatikan bahwa, jika waktunya 00:15, maka bagian ekstrapolasi saya akan memiliki waktu dari 00:01 hingga 00:14 dan 00:16 hingga 00:29, seperti yang ditunjukkan di bawah ini:
---Sasaran---:
Jika kategori B, maka waktu ekstrapolasinya adalah 5 menit.
Hasil akhirnya akan memiliki data asli dengan semua ekstrapolasi waktu dan tidak ada nilai waktu duplikat berdasarkan Kategori.
--- Proses Berpikir----:
Strategi saya adalah membagi ke dalam kategori A dan B, menemukan cara untuk menambahkan waktu ekstrapolasi dan menambahkannya kembali ke tabel data asli.
Sejauh ini, saya tahu cara membagi ke dalam kategori A dan B, membuat fungsi untuk menambahkan menit ke kolom as.ITime ketik Waktu dan ulangi setiap baris di kolom Waktu
add_minutes <- function(m) {
x <- m * 60
return(x)
}
A <- dt[Category == 'A']
B <- dt[Category == 'B']
A <- A[,list(freq=rep(1,14)), by =.(Time,Values1,Values2,Values3,Category)][,freq:=NULL]
Namun, saya tidak tahu cara menggabungkan fungsi add_menit() ke baris berulang tersebut untuk:
Atur ulang waktu untuk setiap nilai waktu asli. Misalnya, jika waktu asli adalah 00:30. Saya berhasil mengulang baris itu sebanyak 14 kali, lalu saya ingin 14 kemunculan 00:30 itu berurutan dari 00:31 hingga 00:44. Jika waktu aslinya 00:45, maka saya ingin urutannya dari 00:46 hingga 00:59, dan seterusnya.
Tambahkan ini kembali ke tabel data asli
Terima kasih sebelumnya atas bantuan Anda!!
dt
. Saya yakin, bagian yang menarik bukanlahhead()
atautail()
melainkan bagian tengah tempatCategory
beralih dariA
keB
. Di sinilah jawaban-jawaban yang berbeda perlu dibandingkan. Terima kasih. - person Uwe   schedule 21.08.2020