将NA替换为R中同一列中的另一个值

将NA替换为R中同一列中的另一个值,r,R,我试图用dplyr包在同一列中的继续值替换NA,但没有得到结果。下面是我正在使用的脚本 data <- read.csv("data.csv",header=T,na.strings=c("","NULL")) data$ID <- paste(data$ID1, data$ID2, sep='_') data$End.Date <- as.Date(data$End.Date, "%d-%b-%y") data1 <- data[order(data$ID, da

我试图用dplyr包在同一列中的继续值替换NA,但没有得到结果。下面是我正在使用的脚本

data <- read.csv("data.csv",header=T,na.strings=c("","NULL"))

data$ID <- paste(data$ID1, data$ID2, sep='_')

data$End.Date <- as.Date(data$End.Date, "%d-%b-%y")

data1 <- data[order(data$ID, data$End.Date),]

library(tidyr)
library(dplyr)

data1 %>% 
  group_by(ID) %>% 
  fill(Start.date, .direction = 'up') %>% 
  fill(Start.date, .direction = 'down')

动物园图书馆有一个很好的函数,名为na.locf()

图书馆(动物园)
图书馆(dplyr)

数据可能重复我刚刚检查了你的代码,得到的
data1
中没有NA。我认为在这种情况下,更规范的重复是这样一个:,但我同意ssp3nc3r,NA替换代码看起来很好,OP应该处理导入代码,并确保NA值出现在应该出现的地方。@Gregor,非常感谢您的回复,能够使用您共享的信息替换NA。在
ifelse(is.NA())
构造中运行
NA.locf
是很少见的。OP正在尝试使用
tidyr::fill
,这与
zoo::na.locf
非常相似-我不确定用
na.locf
替换
fill
是否可能解决任何问题…@Matt,感谢分享脚本。我尝试了您的脚本,能够替换start.date中缺失值的数据,但不幸的是,它将列的格式更改为数字。不知道为什么它改变了列的格式。
ID1 ID2 Start date  End Date
1031    40038   7-Nov-16    1-Jan-17
1031    40037   12-Sep-16   2-Oct-16
1031    40033   15-Feb-16   2-Oct-16
1031    40033   15-Feb-16   3-Jul-16
1031    40038   7-Nov-16    4-Dec-16
1031    40035   18-Jul-16   4-Sep-16
1031    40033   15-Feb-16   4-Sep-16
1031    40043   23-Jan-17   5-Feb-17
1031    40038   7-Nov-16    5-Feb-17
1031    40042   18-Jan-17   5-Feb-17
1031    40033   15-Feb-16   5-Jun-16
1031    40044   17-Feb-17   5-Mar-17
1031    40043   23-Jan-17   5-Mar-17
1031    40037   12-Sep-16   6-Nov-16
1031    40035   NULL    7-Aug-16
1031    40033   15-Feb-16   7-Aug-16
1031    40036   NULL    7-Aug-16
1031    40038   7-Nov-16    8-Jan-17
1031    40045   28-Mar-17   9-Apr-17
1031    40033   15-Feb-16   9-Oct-16
1031    40037   12-Sep-16   9-Oct-16
1031    40033   15-Feb-16   10-Jul-16
1031    40038   7-Nov-16    11-Dec-16
1031    40033   15-Feb-16   11-Sep-16
1031    40043   23-Jan-17   12-Feb-17
1031    40033   15-Feb-16   12-Jun-16
1031    40043   23-Jan-17   12-Mar-17
1031    40044   17-Feb-17   12-Mar-17
1031    40037   12-Sep-16   13-Nov-16
1031    40038   7-Nov-16    13-Nov-16
1031    40033   15-Feb-16   14-Aug-16
1031    40035   18-Jul-16   14-Aug-16
1031    40038   7-Nov-16    15-Jan-17
1031    40045   28-Mar-17   16-Apr-17
1031    40033   15-Feb-16   16-Oct-16
1031    40037   12-Sep-16   16-Oct-16
1031    40033   15-Feb-16   17-Jul-16
1031    40038   7-Nov-16    18-Dec-16
1031    40033   15-Feb-16   18-Sep-16
1031    40037   12-Sep-16   18-Sep-16
1031    40043   23-Jan-17   19-Feb-17
1031    40033   15-Feb-16   19-Jun-16
1031    40043   23-Jan-17   19-Mar-17
1031    40038   7-Nov-16    20-Nov-16
1031    40037   12-Sep-16   20-Nov-16
1031    40035   18-Jul-16   21-Aug-16
1031    40033   15-Feb-16   21-Aug-16
1031    40039   9-Jan-17    22-Jan-17
1031    40038   7-Nov-16    22-Jan-17
1031    40033   15-Feb-16   22-May-16
1031    40045   28-Mar-17   23-Apr-17
1031    40037   12-Sep-16   23-Oct-16
1031    40033   15-Feb-16   23-Oct-16
1031    40033   15-Feb-16   24-Jul-16
1031    40038   7-Nov-16    25-Dec-16
1031    40033   15-Feb-16   25-Sep-16
1031    40037   12-Sep-16   25-Sep-16
1031    40043   23-Jan-17   26-Feb-17
1031    40044   17-Feb-17   26-Feb-17
1031    40033   15-Feb-16   26-Jun-16
1031    40043   23-Jan-17   26-Mar-17
1031    40037   12-Sep-16   27-Nov-16
1031    40038   7-Nov-16    27-Nov-16
1031    40033   15-Feb-16   28-Aug-16
1031    40035   18-Jul-16   28-Aug-16
1031    40038   7-Nov-16    29-Jan-17
1031    40042   18-Jan-17   29-Jan-17
1031    40033   15-Feb-16   29-May-16
1031    40037   12-Sep-16   30-Oct-16
1031    40036   8-Jul-16    31-Jul-16
1031    40033   15-Feb-16   31-Jul-16
1031    40035   18-Jul-16   31-Jul-16
library(zoo)
library(dplyr)

data <- read.csv("data.csv",header=T,na.strings=c("","NULL"))

data$ID <- paste(data$ID1, data$ID2, sep='_')

data$End.Date <- as.Date(data$End.Date, "%d-%b-%y")

data1 <- data[order(data$ID, data$End.Date),]

data1 <- data1 %>% 
         group_by(ID) %>% 
         mutate(Start.Date = ifelse(is.na(Start.Date),na.locf(Start.Date, na.rm = FALSE), Start.Date))