首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的Bigdata线性插值

R中的Bigdata线性插值
EN

Stack Overflow用户
提问于 2020-11-23 15:15:24
回答 2查看 61关注 0票数 0

我有一个包含NA值的大数据集。样本数据如下。

代码语言:javascript
复制
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。例如,在NA中填充col_1 =‘A’和col_2 =‘C’

代码语言:javascript
复制
value = 0.9 + (0.6-0.9)*(15-10)/(20-10) =  0.75

对于第二个NA,col_1 =‘A’和col_2 =‘D’

代码语言:javascript
复制
value = 0.9 + (0.4-0.9)*(25-10)/(30-10) =  0.53

既然我的数据很大,有没有一种有效的方法去做呢?谢谢。预期的结果是。

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-23 15:30:22

如果这足够快的话,试试:

代码语言:javascript
复制
library(data.table)
library(zoo)

setDT(Data)
Data[, value1 := na.approx(value, x = col_3), by = .(col_1, col_2)]
#    col_1 col_2 col_3 value value1
# 1:     A     C    10   0.9  0.900
# 2:     A     C    15    NA  0.750
# 3:     A     C    20   0.6  0.600
# 4:     A     D    10   0.9  0.900
# 5:     A     D    20    NA  0.650
# 6:     A     D    25    NA  0.525
# 7:     A     D    30   0.4  0.400
# 8:     B     E     5   0.8  0.800
# 9:     B     E    10    NA  0.600
#10:     B     E    15   0.4  0.400
票数 1
EN

Stack Overflow用户

发布于 2020-11-23 22:05:45

带有dplyr的选项

代码语言:javascript
复制
library(dplyr)
library(zoo)
Data %>%  
    group_by(col_1, col_2) %>%
     mutate(value1 = na.approx(value, x = col_3))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64971101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档