R 如果<NA>其他列值为



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

    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

我需要用虚拟日期替换丢失的日期(假设 21/06/1866(,但仅适用于谢菲尔德市。

在 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

相关内容

  • 没有找到相关文章

最新更新