根据 ID 将值复制到其他 NA 单元格
Copy value to other NA cells based upon ID
我正在尝试将具有值的 diff
列的值复制到匹配 client_id
的相应空单元格中。我确信这在 data.table 中很容易完成,但我不确定如何做到。
这是我的数据:
client_id <- c(1,1,1,2,2,3,3,3,3,4,4)
date <- c("1/1/2021","1/2/2021","1/3/2021","5/1/2021","10/1/2021","10/1/2021","11/1/2021","1/2/2021","10/9/2021","15/9/2021","16/10/2021")
date <- as.Date(date, '%d/%m/%Y')
score <- c(15,10,19,20,10,25,20,15,10,30,5)
diff <- c(NA, NA, -4, NA, 10, NA, NA, NA, 15, NA, 25)
df <- data.frame(client_id, date, score, diff)
df <-setDT(df)
我想以此结束:
client_id <- c(1,1,1,2,2,3,3,3,3,4,4)
date <- c("1/1/2021","1/2/2021","1/3/2021","5/1/2021","10/1/2021","10/1/2021","11/1/2021","1/2/2021","10/9/2021","15/9/2021","16/10/2021")
date <- as.Date(date, '%d/%m/%Y')
score <- c(15,10,19,20,10,25,20,15,10,30,5)
diff <- c(-4, -4, -4, 10, 10, 15, 15, 15, 15, 25, 25)
df <- data.frame(client_id, date, score, diff)
df <-setDT(df)
感谢您的帮助!
有多种方法可以做到这一点,具体取决于您的数据。这是 nafill
:
的“下一次观察”形式
df[, diff := nafill(diff, type = "nocb"), by = .(client_id)][]
# client_id date score diff
# <num> <Date> <num> <num>
# 1: 1 2021-01-01 15 -4
# 2: 1 2021-02-01 10 -4
# 3: 1 2021-03-01 19 -4
# 4: 2 2021-01-05 20 10
# 5: 2 2021-01-10 10 10
# 6: 3 2021-01-10 25 15
# 7: 3 2021-01-11 20 15
# 8: 3 2021-02-01 15 15
# 9: 3 2021-09-10 10 15
# 10: 4 2021-09-15 30 25
# 11: 4 2021-10-16 5 25
我正在尝试将具有值的 diff
列的值复制到匹配 client_id
的相应空单元格中。我确信这在 data.table 中很容易完成,但我不确定如何做到。
这是我的数据:
client_id <- c(1,1,1,2,2,3,3,3,3,4,4)
date <- c("1/1/2021","1/2/2021","1/3/2021","5/1/2021","10/1/2021","10/1/2021","11/1/2021","1/2/2021","10/9/2021","15/9/2021","16/10/2021")
date <- as.Date(date, '%d/%m/%Y')
score <- c(15,10,19,20,10,25,20,15,10,30,5)
diff <- c(NA, NA, -4, NA, 10, NA, NA, NA, 15, NA, 25)
df <- data.frame(client_id, date, score, diff)
df <-setDT(df)
我想以此结束:
client_id <- c(1,1,1,2,2,3,3,3,3,4,4)
date <- c("1/1/2021","1/2/2021","1/3/2021","5/1/2021","10/1/2021","10/1/2021","11/1/2021","1/2/2021","10/9/2021","15/9/2021","16/10/2021")
date <- as.Date(date, '%d/%m/%Y')
score <- c(15,10,19,20,10,25,20,15,10,30,5)
diff <- c(-4, -4, -4, 10, 10, 15, 15, 15, 15, 25, 25)
df <- data.frame(client_id, date, score, diff)
df <-setDT(df)
感谢您的帮助!
有多种方法可以做到这一点,具体取决于您的数据。这是 nafill
:
df[, diff := nafill(diff, type = "nocb"), by = .(client_id)][]
# client_id date score diff
# <num> <Date> <num> <num>
# 1: 1 2021-01-01 15 -4
# 2: 1 2021-02-01 10 -4
# 3: 1 2021-03-01 19 -4
# 4: 2 2021-01-05 20 10
# 5: 2 2021-01-10 10 10
# 6: 3 2021-01-10 25 15
# 7: 3 2021-01-11 20 15
# 8: 3 2021-02-01 15 15
# 9: 3 2021-09-10 10 15
# 10: 4 2021-09-15 30 25
# 11: 4 2021-10-16 5 25