繁体   English   中英

R替换 <NA> 日期,如果其他列的值为

[英]R Replace <NA> with date, if other columns value is

假设我有两列,其中一列为位置,一列为日期,其中一些缺失。

    City       Date
1   Sheffield  19/05/1985
2   Sheffield  21/06/1986
3   Sheffield  <NA>
4   Newcastle  14/07/1996
5   Newcastle  <NA>
6   Liverpool  12/11/2001

我需要用虚拟日期(例如1866年6月21日)替换缺少的日期,但仅适用于谢菲尔德市。

在SQL中,语法为:

UPDATE Dataframe SET Date = "21/06/1866" WHERE city="Sheffield"

在R中,我尝试了以下尝试(但没有成功):

filter <- (Dataframe$Date == is.na(Dataframe$Date) & Dataframe$City =="Sheffield")
Dataframe[filter,"Date"] <- as.Date("1866/06/21")

但是,这引发了以下错误:

[<-.data.frame*tmp* ,过滤器,“日期”,值= -37814)中的错误:数据帧的下标分配中不允许缺少值

任何人有任何想法吗? 我觉得这可能非常容易,但是我只是不知道它是如何完成的。

df[df$City == "Sheffield" & is.na(df$Date), "Date"] = as.Date("1866/06/21", format = "%Y/%m/%d")

> df
       City       Date
1 Sheffield 1985-05-19
2 Sheffield 1986-06-21
3 Sheffield 1866-06-21
4 Newcastle 1996-07-14
5 Newcastle       <NA>
6 Liverpool 2001-11-12

如果您查看过滤器,它将一直返回FALSE。

> filter <- (df$Date == is.na(df$Date) & df$City =="Sheffield")
> filter
[1] FALSE FALSE FALSE FALSE FALSE FALSE

您只需要编写is.na(df$Date)这将返回一个逻辑向量,指示日期是否为NA。 您编写的日期检查内容是TRUE或FALSE(从is.na(df$Date) ),因为它是日期,所以它永远不会。

> filter <- (is.na(df$Date) & df$City =="Sheffield")
> filter
[1] FALSE FALSE  TRUE FALSE FALSE FALSE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM