【发布时间】:2021-03-06 07:50:23
【问题描述】:
我有一个包含一些 NA 值的大数据集。示例数据如下。
Data <- data.frame(col_1 = c('A','A','A','A', 'A', 'A', 'A', 'B', 'B', 'B'), col_2 = c('C','C', 'C', 'D', 'D','D', 'D', 'E', 'E', 'E'), col_3 = c(10,15,20, 10,20,25,30,5,10,15), value = c(0.9, NA, 0.6, 0.9, NA, NA,0.4, 0.8,NA,0.4))
我想用线性插值填充那些NAs。
例如为 col_1 = 'A' 和 col_2 = 'C' 填写NA
value = 0.9 + (0.6-0.9)*(15-10)/(20-10) = 0.75
对于第二个NA,col_1 = ‘A’ and col_2 = ‘D’
value = 0.9 + (0.4-0.9)*(25-10)/(30-10) = 0.53
由于我的数据很大,有没有一种有效的方法?谢谢你。 预期的结果是。
Data_Updated <- data.frame(col_1 = c('A','A','A','A', 'A', 'A', 'A', 'B', 'B', 'B'), col_2 = c('C','C', 'C', 'D', 'D','D', 'D', 'E', 'E', 'E'), col_3 = c(10,15,20, 10,20,25,30,5,10,15), value = c(0.9, 0.75, 0.6, 0.9, 0.65, 0.53,0.4, 0.8,0.6,0.4))
【问题讨论】:
-
你认为什么是“大”?如果它不超过 10 GB,我不会认为它“大”,只需使用 zoo::na.approx 和 group-by 函数(我更喜欢包 data.table,但你也可以使用 dplyr)。
标签: r bigdata linear-interpolation