r - 用以前的非 NA 可用值 R 填充 NA
问题描述
我正在尝试用一组 300 万行数据中可用的非 NA 值填充 NA 值。目前我能够做到,但大约需要 3 小时。
约束 - 我不能使用任何库,必须使用 R basic
数据 - 我的数据如下所示(摘录)
目前我一直在使用以下代码
CHARDIF <- diff(VERINDEX_VEC)
k = 1
for (j in VERINDEX_VEC){
#when value is in vector calculate difference to next value and copy VER.
Special cases for First and Last value
ifelse(j == 1, ALL_POS$C01[j:CHARDIF[k]] <- ALL_POS$C01[j],
ifelse(j == max(VERINDEX_VEC), ALL_POS$C01[j:max(as.numeric
(row.names(ALL_POS)))] <- ALL_POS$C01[j],ALL_POS$C01[j:(j+CHARDIF[k]-1)] <-
ALL_POS$C01[j]))
k = k + 1
}
如您所见,我有一个带有非 NA 位置的向量,然后计算位置之间的差异,这有助于我选择要粘贴的范围,因为我知道何时发生下一个非 NA 值。
有没有人有更好的解决方案?特别是更快的
解决方案
首先我会生成随机数据来测试这个
# generate random data
test_data <- data.frame(x = 1:100, y = rnorm(100))
# add random NAs
test_data$y[sample(1:100, 50)] <- NA
现在试试这个:
# locate non NAs in the wanted column
not_na <- which(!is.na(test_data$y))
# define the function replace_NAs_custom
replace_NAs_custom <- function(i, col){
if(is.na(col[i])){
col[i] <- col[max(not_na[not_na < i] )]
}
return(col[i] )
}
test_data$y_2 <- unlist(lapply(1:nrow(test_data), replace_NAs_custom, test_data$y))
推荐阅读
- javascript - 为什么 CSS font-size 更改会稍微删除文本?
- google-apps-script - 无法将谷歌云平台默认项目更改为标准
- python - 路径应该是字符串、字节或 os.PathLike,而不是 InMemoryUploadedFile
- vue.js - 在 vue 项目中更改 package.json 以进行自定义构建模式
- firebase - React Native:使用“refFromURL”从firebase中删除图像
- flutter - 导航栏不会出现在所有屏幕上
- vue.js - 无法安装 vuemdb
- java - Spring WS:没有 package-info.java 的 XML 命名空间前缀处理?
- java - Spring Boot - Swagger 文档不起作用
- javascript - Chrome 扩展 - 监听按钮点击事件