我使用以下命令将存储为“ dd-Mmm-yyyy”(即2016年4月18日”)的变量转换为格式为“ mm-dd-yyyy”的日期:
data$variable = as.Date(data$variable, "%d-%b-%Y")
效果很好。另外,运行此命令后,以前为空的缺失值现在在我的数据集中显示为NA。但是,然后我尝试使用is.na将这些NA值设为0:
data[is.na(data)] <- 0
但是出现以下错误:
Error in as.Date.numeric(value) : 'origin' must be supplied
我一直无法弄清楚该如何解决。有什么建议吗?
答案 0 :(得分:0)
日期“ 0”可能不明确:
1/0/1900
(看起来很奇怪);同样,时间0为1/0/1900 12:00:00 AM
在R中,一旦定义了类POSIXt
或Date
,然后用as.numeric
将其转换回数字,将遵循POSIX / epoch约定,这意味着
as.numeric(as.Date("1969-01-01"))
# [1] -365
但是它永远不会假设日期/时间输入模棱两可,因此您必须使用origin=
来指定它。 (请注意,我并没有必须在上一个命令中提供原点,因为"1969-01-01"
既非数字,又具有as.Date
可以轻松解释的明确日期格式; as.Date("1969")
不起作用,可能是因为它可能是1969年内的任何日期。)
为明确起见,建议您使用
as.Date(0, origin="1970-01-01")
as.POSIXct(0, origin="1970-01-01") # assumes 00:00:00 UTC
as.POSIXct(0, origin="1970-01-01 00:00:00")
答案 1 :(得分:0)
您可以尝试以下方法将NA转换为0。
library(tidyr)
library(tidyverse)
library(dplyr)
mutate_all(x, ~replace(., is.na(.), 0)
mutate_all(x, ~replace_na(., 0))
library(dplyr)
# This converts at column level.
df <- df %>%
mutate(Col1 = if_else(is.na(Col1), 0, Col1))
x <- replace(x,is.na(x),0)
希望上述方法之一可以工作。