Tôi muốn đánh số kết hợp một số hàng trong một dataframe (được đặt trên ID và trên Time)hàng số bằng cách thay đổi, nhưng bắt đầu lại khi điều kiện là hit
tc <- textConnection('
id time end_yn
abc 10 0
abc 11 0
abc 12 1
abc 13 0
def 10 0
def 15 1
def 16 0
def 17 0
def 18 1
')
test <- read.table(tc, header=TRUE)
Mục đích là để tạo ra một mới cột ("number
") đánh số mỗi hàng trên id
từ 1 to n
cho đến khi end_yn == 1
bị nhấn. Sau end_yn == 1
, việc đánh số sẽ bắt đầu lại.
Nếu không lấy trạng end_yn == 1
vào tài khoản các hàng có thể được đánh số sử dụng:
DT <- data.table(test)
DT[, id := seq_len(.N), by = id]
Tuy nhiên, kết quả mong đợi nên là:
id time end_yn number
abc 10 0 1
abc 11 0 2
abc 12 1 3
abc 13 0 1
def 10 0 1
def 15 1 2
def 16 0 1
def 17 0 2
def 18 1 3
Làm thế nào để kết hợp các điều kiện end_yn == 1
?
Rất thông minh để mang giá trị cuối cùng về phía trước. Đây chính xác là những gì tôi cần và hoạt động nhanh hơn nhiều so với giải pháp ban đầu của tôi. Cảm ơn! –
Điều gì sẽ xảy ra nếu tôi muốn cung cấp cho tất cả các mục nhập cùng một số cho đến khi điều kiện end_yn được nhấn? Vì vậy, hãy cung cấp số giá trị 1 cho đến khi end_yn = 1 lần đầu tiên, sau đó 2 cho đến khi end_yn = 1 cho lần thứ hai, sau đó là 3 v.v. (trên mỗi coockie_id). seq_len (.N) cần phải được thay thế Tôi nghĩ, nhưng tôi không thể tìm ra những gì –
@MaxvanderHeijden, cho rằng, bạn có thể thử một cái gì đó như 'DT [, number: = cumsum (end_yn) + 1, by =" id " ] ', nhưng điều đó sẽ bắt đầu đánh số tại' 2' nếu 'end_yn' là' 1' cho mục nhập đầu tiên của 'id'. Hãy thử tìm kiếm thẻ data.table trên SO, vì một câu hỏi tương tự có thể đã được yêu cầu. – BenBarnes