Tambahkan 1 ke nilai saat peringkat meningkat

Saya bekerja dengan beberapa data peringkat yang dikelompokkan yang memiliki garis lintang dan garis bujur. Saya ingin menambahkan 0,00075 ke bidang garis lintang setiap kali peringkatnya naik 1.

Di bawah ini adalah salah satu dari 5000 grup dan tidak diketahui berapa rak maksimalnya, jadi saya memerlukan ini dengan dalam grup_by idealnya menggunakan dplyr.

Saya tahu saya bisa menggunakan a

group_by(loc_id) %>% mutate(y = if_else(rank > 1, as.character(Y + 0.00075), as.character(Y))

tapi ini hanya berhasil satu kali saja.

Berikut adalah beberapa kode r untuk membangun kerangka data yang penuh dengan data

id <- c(1,2,3,4,5)
loc_id <- c(77,77,77,77,77)
x <- c(-74.001981, -74.001981, -74.001981, -74.001981, -74.001981)
y <- c(40.736038, 40.736038, 40.736038, 40.736038, 40.736038)
views <- c(55,45,66,22,99)
rank <- c(3,4,2,5,1)
data <- data.frame(id, loc_id, x, y, views, rank)

person Jeffkrop    schedule 23.08.2019    source sumber
comment
Apa yang Anda maksud dengan satu kali saja. jika dikelompokkan berdasarkan 'loc_id' maka nilai untuk setiap grup akan berubah. Selain itu, Anda hanya memberikan data untuk satu 'loc_id', jadi tidak jelas maksud Anda   -  person akrun    schedule 23.08.2019
comment
Itu mengubah semua nilai dengan peringkat lebih besar 1 perlu diulang sehingga setiap baris dalam grup memiliki garis lintang berbeda yang meningkat sebesar 0,00075 seiring naiknya peringkat.   -  person Jeffkrop    schedule 23.08.2019
comment
Tidak bisakah kamu melakukan data %>% group_by(loc_id) %>% mutate(y = y + ((rank - 1) * 0.00075)) saja?   -  person tmfmnk    schedule 23.08.2019
comment
Terima kasih @tmfmnk Saya belum pernah melihatnya. Terima kasih telah meluangkan waktu   -  person Jeffkrop    schedule 23.08.2019


Jawaban (1)


Mengubah komentar saya menjadi postingan. Dengan menggunakan dplyr, Anda dapat melakukan:

data %>% 
 group_by(loc_id) %>% 
 mutate(y = y + ((rank - 1) * 0.00075))
person tmfmnk    schedule 23.08.2019