r - 在值之间的数据框中填写 NA
问题描述
我有一个示例数据集
newdata<-data.frame(Tow.y=c(21,"NA","NA","NA","NA","NA",22,"NA","NA","NA","NA","NA",23,"NA","NA"),Tow=c("NA","NA","NA",21,"NA","NA","NA","NA",22,"NA","NA","NA","NA","NA",23))
newdata$Tow.y<-as.numeric(as.character(newdata$Tow.y))
newdata$Tow<-as.numeric(as.character(newdata$Tow))
newdata1<-newdata %>%
mutate(Station = coalesce(Tow.y, Tow))
newdata1
结果代码产生:
Tow.y Tow Station
1 21 NA 21
2 NA NA NA
3 NA NA NA
4 NA 21 21
5 NA NA NA
6 NA NA NA
7 22 NA 22
8 NA NA NA
9 NA 22 22
10 NA NA NA
11 NA NA NA
12 NA NA NA
13 23 NA 23
14 NA NA NA
15 NA 23 23
我想为 Station 中唯一值之间的 NA 填写 NA。因此,两个 21 值之间的 NA 将为 21,22 之间的 NA 将为 22,依此类推。连续数字之间的 NA 将保持为 NA。
像这样:
Tow.y Tow Station
1 21 NA 21
2 NA NA 21
3 NA NA 21
4 NA 21 21
5 NA NA NA
6 NA NA NA
7 22 NA 22
8 NA NA 22
9 NA 22 22
10 NA NA NA
11 NA NA NA
12 NA NA NA
13 23 NA 23
14 NA NA 23
15 NA 23 23
我已经尝试了 zoo 包中的 na.locf 函数,但是它替换了所有 NA 值。
newdata1$Station2<-na.locf(newdata1$Station,na.rm = F)
我看过的其他示例表明您可以将 na.locf 与组变量一起使用,但我没有对数据集完整的分组变量。有没有人可以在我需要填写的地方填写 NA。
解决方案
这是一个好方法。我留下了帮助列来演示它是如何工作的,但是您可以使用select
.
newdata1 %>%
mutate(from_first = zoo::na.locf(Station, na.rm = FALSE),
from_last = zoo::na.locf(Station, na.rm = FALSE, fromLast = TRUE),
result = if_else(from_first == from_last, from_first, Station))
# Tow.y Tow Station from_first from_last result
# 1 21 NA 21 21 21 21
# 2 NA NA NA 21 21 21
# 3 NA NA NA 21 21 21
# 4 NA 21 21 21 21 21
# 5 NA NA NA 21 22 NA
# 6 NA NA NA 21 22 NA
# 7 22 NA 22 22 22 22
# 8 NA NA NA 22 22 22
# 9 NA 22 22 22 22 22
# 10 NA NA NA 22 23 NA
# 11 NA NA NA 22 23 NA
# 12 NA NA NA 22 23 NA
# 13 23 NA 23 23 23 23
# 14 NA NA NA 23 23 23
# 15 NA 23 23 23 23 23
推荐阅读
- openshift - 如何在命令提示符 Mac 中在线运行 openshift
- ios - pushViewController 时禁用导航栏透明度
- android - 牛津词典 Api 通过 EditText 搜索单词
- reactjs - Azure多个应用程序与反应,在浏览器中加载反应后无法访问其他应用程序
- excel - 具有动态范围的 VBA VLOOKUP
- php - Invision 电源板错误
- node.js - 使用 Jest 和 Mongoose 进行快速 API 测试
- asp.net-core - Autofac 和 Automapper - 已注册但未解析的配置文件
- java - 构造函数 Scanner(InputStream) 未定义
- save - pyside 读/写字典列表