如何填充(自动填充)值,例如用 R 中的 data.table 将 NA 替换为组中的第一个值?
How to FILL DOWN (autofill) value , eg replace NA with first value in group, using data.table in R?
非常简单和常见的任务:
我需要在 data.table
中填写(类似于 MS Excel 中的自动填充功能)以便
library(data.table)
DT <- fread(
"Paul 32
NA 45
NA 56
John 1
NA 5
George 88
NA 112")
变成
Paul 32
Paul 45
Paul 56
John 1
John 5
George 88
George 112
谢谢!
是的,最好的方法是使用@Rui Barradas zoo
包的想法。您可以使用 na.locf
函数在一行代码中轻松完成。
library(zoo)
DT[, V1:=na.locf(V1)]
在使用 fread 读取数据后,将 V1 替换为您为列命名的任何名称。祝你好运!
例如2,可以考虑使用stats::spline
外推如下:
DT2[is.na(V2), V2 :=
as.integer(DT2[, spline(.I[!is.na(V2)], V2[!is.na(V2)], xout=.I[is.na(V2)]), by=.(V1)]$y)]
输出:
V1 V2
1: Paul 1
2: Paul 2
3: Paul 3
4: Paul 4
5: John 100
6: John 110
7: John 120
8: John 130
数据:
DT2 <- fread(
"Paul, 1
Paul, 2
Paul, NA
Paul, NA
John, 100
John, 110
John, NA
John, NA")
非常简单和常见的任务:
我需要在 data.table
中填写(类似于 MS Excel 中的自动填充功能)以便
library(data.table)
DT <- fread(
"Paul 32
NA 45
NA 56
John 1
NA 5
George 88
NA 112")
变成
Paul 32
Paul 45
Paul 56
John 1
John 5
George 88
George 112
谢谢!
是的,最好的方法是使用@Rui Barradas zoo
包的想法。您可以使用 na.locf
函数在一行代码中轻松完成。
library(zoo)
DT[, V1:=na.locf(V1)]
在使用 fread 读取数据后,将 V1 替换为您为列命名的任何名称。祝你好运!
例如2,可以考虑使用stats::spline
外推如下:
DT2[is.na(V2), V2 :=
as.integer(DT2[, spline(.I[!is.na(V2)], V2[!is.na(V2)], xout=.I[is.na(V2)]), by=.(V1)]$y)]
输出:
V1 V2
1: Paul 1
2: Paul 2
3: Paul 3
4: Paul 4
5: John 100
6: John 110
7: John 120
8: John 130
数据:
DT2 <- fread(
"Paul, 1
Paul, 2
Paul, NA
Paul, NA
John, 100
John, 110
John, NA
John, NA")