So sánh các hàng liền kề trong dữ liệu R.


Trần Liên Trân
4 năm trước
Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 5204

Là một phần trong quá trình khám phá bộ dữ liệu trả giá của Cơ quan đăng ký đất đai , tôi muốn so sánh sự khác biệt giữa doanh số bất động sản liên tiếp.

Điều này có nghĩa là chúng ta cần nhóm doanh số theo một mã định danh tài sản và sau đó lấy giá bán trước đó thành một cột trên mỗi hàng, trừ khi đó là lần bán đầu tiên, trong trường hợp đó chúng ta sẽ có 'NA'. Chúng ta có thể làm điều này bằng cách tạo ra một biến lag .

Tôi sẽ sử dụng một bộ dữ liệu đơn giản hơn, có cấu trúc rất giống với Cơ quan đăng ký đất đai để chứng minh:

> blogDT = data.table(name = c("Property 1","Property 1","Property 1","Property 2","Property 2","Property 2"), 
                      price = c(10000, 12500, 18000, 245000, 512000, 1000000))
 
> blogDT
         name   price
1: Property 1   10000
2: Property 1   12500
3: Property 1   18000
4: Property 2  245000
5: Property 2  512000
6: Property 2 1000000

Chúng tôi muốn nhóm theo cột 'tên' và sau đó có giá ở hàng 1 hiển thị ở hàng 2, giá ở hàng 2 trên hàng 3, giá ở hàng 4 trên hàng 5 và giá ở hàng 5 trên hàng 6. Để làm điều đó, chúng tôi sẽ giới thiệu một cột 'lag.price':

> blogDT[, lag.price := c(NA, price[-.N]), by = name]
 
> blogDT
         name   price lag.price
1: Property 1   10000        NA
2: Property 1   12500     10000
3: Property 1   18000     12500
4: Property 2  245000        NA
5: Property 2  512000    245000
6: Property 2 1000000    512000

Tiếp theo hãy tính chênh lệch giữa hai giá:

> blogDT[, diff := price - lag.price]
> blogDT
         name   price lag.price   diff
1: Property 1   10000        NA     NA
2: Property 1   12500     10000   2500
3: Property 1   18000     12500   5500
4: Property 2  245000        NA     NA
5: Property 2  512000    245000 267000
6: Property 2 1000000    512000 488000

Cuối cùng, hãy đặt hàng bảng dữ liệu theo mức tăng giá lớn nhất:

> blogDT[order(-diff)]
         name   price lag.price   diff
1: Property 2 1000000    512000 488000
2: Property 2  512000    245000 267000
3: Property 1   18000     12500   5500
4: Property 1   12500     10000   2500
5: Property 1   10000        NA     NA
6: Property 2  245000        NA     NA
Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 5204