- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 lubridate
中偶然发现了一个奇怪的行为。包裹:dmy(NA)
trows 一个错误,而不是仅仅返回一个 NA。当我想转换包含一些元素为 NA 的列和一些通常可以毫无问题地转换的日期字符串时,这会给我带来问题。
这是最小的例子:
library(lubridate)
df <- data.frame(ID=letters[1:5],
Datum=c("01.01.1990", NA, "11.01.1990", NA, "01.02.1990"))
df_copy <- df
#Question 1: Why does dmy(NA) not return NA, but throws an error?
df$Datum <- dmy(df$Datum)
Error in function (..., sep = " ", collapse = NULL) : invalid separator
df <- df_copy
#Question 2: What's a work around?
#1. Idea: Only convert those elements that are not NAs
#RHS works, but assigning that to the LHS doesn't work (Most likely problem::
#column "Datum" is still of class factor, while the RHS is of class POSIXct)
df[!is.na(df$Datum), "Datum"] <- dmy(df[!is.na(df$Datum), "Datum"])
Using date format %d.%m.%Y.
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = c(NA_integer_, NA_integer_, :
invalid factor level, NAs generated
df #Only NAs, apparently problem with class of column "Datum"
ID Datum
1 a <NA>
2 b <NA>
3 c <NA>
4 d <NA>
5 e <NA>
df <- df_copy
#2. Idea: Use mapply and apply dmy only to those elements that are not NA
df[, "Datum"] <- mapply(function(x) {if (is.na(x)) {
return(NA)
} else {
return(dmy(x))
}}, df$Datum)
df #Meaningless numbers returned instead of date-objects
ID Datum
1 a 631152000
2 b NA
3 c 632016000
4 d NA
5 e 633830400
NA
的每个转换(例如 dmy())都是很好的编程习惯。返回
NA
再次(就像
2 + NA
一样)?如果这种行为是有意的,我该如何转换
data.frame
包含
NA
的列s 通过
dmy()
功能?
最佳答案
Error in function (..., sep = " ", collapse = NULL) : invalid separator
是由 lubridate:::guess_format()
引起的功能。 NA
被传递为 sep
调用 paste()
,特别是在 fmts <- unlist(mlply(with_seps, paste))
.您可以尝试改进 lubridate:::guess_format()
来解决这个问题。
否则,您是否可以更改 NA
到字符( "NA"
)?
require(lubridate)
df <- data.frame(ID=letters[1:5],
Datum=c("01.01.1990", "NA", "11.01.1990", "NA", "01.02.1990")) #NAs are quoted
df_copy <- df
df$Datum <- dmy(df$Datum)
关于r - 为什么 lubridate 包中的 dmy() 不适用于 NA?什么是好的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955797/
如何获得润滑间隔对象的“平均值”(或更准确地说是中点)?我试过使用基本的 mean() 函数,但它返回了一个 double 值。 library(lubridate) ex = interval(
我有以下时间范围: A <- c('2016-01-01', '2019-01-05') B <- c('2017-05-05','2019-06-05') X_Period <- interval(
我将数据框列中的日期格式化为字符串,如 09/30/2014 我使用 lubridate 来识别我的日期所属的星期: library(lubridate) week(mdy("09/30/2014")
我有一个以日期时间格式开始和结束的数据框,如下所示: shift_time % unlist() %>% as.duration() } 该函数采用两个区间向量。对于第一个向量的每个元
快速谷歌搜索似乎让我无处可去。 lubridate 中的有效时区是什么 tz选项?特别是,我正在寻找巴西利亚的时区。谢谢! library(lubridate) dts <- c("6-3-1995
我正在尝试处理一组润滑间隔并确定日期是否在该组的任何成员内。 我的时间间隔不重叠,但最好给出一般答案。) 在开始数据分析之前,我不知道那组间隔中有多少个间隔: library(lubridate) #
This question询问 R 中按时间段聚合的情况,pandas 称之为重采样。最有用的答案使用 XTS 包按给定的时间段进行分组,应用一些函数,例如 sum() 或 mean()。 其中一条评
我正在尝试使用 lubridate 包创建日期时间,并且我尝试了以下值: library(lubridate) ymd_hms("2017-07-02 23:00:00") [1] "2017-07-
在 电话 ,我有一个以两种不同格式表示日期的字符串向量: “月/日/年” “月日,年” 第一种格式有一个两位数的年份,所以我的向量看起来像这样: c("3/18/75", "March 10, 199
我有一个关于 R 的 lubridate 包的简单问题。自纪元以来,我有一系列以秒为单位的时间戳。我想将其转换为 YYYY-MM-DD-HH 格式。在基础 R 中,我可以先将其转换为日期格式 > x
考虑以下示例 library(lubridate) library(tidyverse) > hour(ymd_hms('2008-01-04 00:00:00')) [1] 0 现在, data
有没有人有更简洁的方法将润滑周期和持续时间对象四舍五入到分钟而不是秒。 例如,我有以下代码管道: seconds(x = 3600115) %>% as.duration() %>% as.peri
有一些财务数据,我想通过仅选择每周的第一个非星期一来过滤它。通常是星期二,但如果星期二是假日,有时也可以是星期三。 这是我在大多数情况下都有效的代码 XLF % rownames_to_column(
我需要从日期中提取两位数的天数。 例如: date <- as.Date(01-01-2016) year(date) 将给出 '2016' month(date) 将产生 '1' day(date)
我想按月汇总我的日期。我想使用某个月的最后一个星期六作为该月的日期。我可以通过以下方式获得一周中星期六的日期: as.Date(paste(6, week(mdy(mydate)), year(mdy
考虑以下示例 library(lubridate) library(tidyverse) > hour(ymd_hms('2008-01-04 00:00:00')) [1] 0 现在, data
有没有人有更简洁的方法将润滑周期和持续时间对象四舍五入到分钟而不是秒。 例如,我有以下代码管道: seconds(x = 3600115) %>% as.duration() %>% as.peri
首先感谢您对其他帖子的所有回答,这对我帮助很大。这是我的第一个。 我有这样的数据: [1] 1986.05 1986.06 1986.07 1986.08 1986.09 1986.10 1986.
当我将单个日期解析时,它解析准确 > ymd("20011001") [1] "2001-10-01 UTC" 但是当我尝试创建一个日期向量时,它们都会在一天假时出现: > b=c(ymd("2011
我在 R 中使用 lubridate 包时看到了意想不到的结果。我只是想将两个日期组合成一个向量。当我这样做时,时区会改变。这里发生了什么? > x y x [1] "2016-02-08 UTC
我是一名优秀的程序员,十分优秀!