我有一个数据框,每行都有开始日期和结束日期。我想计算两个日期之间的天数并按年份分割。所以从这里开始:
id <- c(1,2,3)
start <- as.Date(c('01/01/2015','01/01/2016','07/01/2015'), format = '%m/%d/%Y')
end <- as.Date(c('12/31/2016','12/31/2016','12/31/2016'), format = '%m/%d/%Y')
df <- data.frame(id, start, end)
Run Code Online (Sandbox Code Playgroud)
| ID | 开始 | 结尾 |
|---|---|---|
| 1 | 2015年1月1日 | 2016年12月31日 |
| 2 | 2016年1月1日 | 2016年12月31日 |
| 3 | 2015年1月7日 | 2016年12月31日 |
对此:
| ID | 开始 | 结尾 | 天_号。 | 2015年 | 2016年 |
|---|---|---|---|---|---|
| 1 | 2015年1月1日 | 2016年12月31日 | 第730章 | 365 | 365 |
| 2 | 2016年1月1日 | 2016年12月31日 | 365 | 0 | 365 |
| 3 | 2015年7月1日 | 2016年12月31日 | 第548章 | 183 | 365 |
感谢任何帮助,请注意我想动态计算年度统计数据,在我的实际案例中我可能会得到很多年的列...我猜 lubridate 可能会有所帮助,但我不确定从哪里开始。
我正在使用 Lubridate 包来格式化数据中的日期。
str(base$date)
#> chr [1:38] " 23.09.2020 " " 23.09.2020 " " 17.06.2020 " " 03.06.2020 " ...
base$date <-dmy(base$date)
str(base$date)
#> Date[1:38], format: "2020-09-23" "2020-09-23" "2020-06-17" "2020-06-03" "2020-05-27" ...
Run Code Online (Sandbox Code Playgroud)
由于日期的原始数据采用格式字符,因此我想使用 Lubridate 包的 dmy 函数将其转换为格式日期 (dd/mm/yyyy)。我得到的格式日期为 yyyy/mm/dd。函数 dmy 不是应该给我 dd/mm/yyyy 格式的日期吗,因为 d 代表日,m 代表月,y 代表年?
我有一个数据集,其中人们的完整年龄为 R 中的字符串(例如,“10 年 8 个月 23 天)”,我需要将其转换为有意义的数字变量。我正在考虑将其转换为有多少天人的年龄(这很困难,因为月份有不同的天数)。因此,最好的解决方案可能是创建一个双变量,将年龄显示为 10.6 或 10.8,一些数字变量携带 10 年 8 个月 5 天大于的信息10年7月12天。
这是我当前变量的示例
library(tibble)
age <- tibble(complete_age =
c("10 years 8 months 23 days",
"9 years 11 months 7 days",
"11 years 3 months 1 day",
"8 years 6 months 12 days"))
age
# A tibble: 4 x 1
complete_age
<chr>
1 10 years 8 months 23 days
2 9 years 11 months 7 days
3 11 years 3 months 1 day
4 8 years …Run Code Online (Sandbox Code Playgroud) Looking to do the SQL equivalent of datediff in R?
基本上,我想在 R 中进行这个计算
Delivery Date Expected Date Difference
2022-01-05 2022-01-07 -2
Run Code Online (Sandbox Code Playgroud) 我有以下字符串描述中欧夏令时间的日期和时间:“2021-09-23 12:00:00”。事实上,我有一整列这样的时间点。由于某些原因,我必须使用“lubridate”包中的函数来处理这些时间。使用 'as_datetime' 我得到
t0 = "2021-09-23 12:00:00"
t1 = as_datetime(t0); t1
## [1] "2021-09-23 12:00:00 UTC"
Run Code Online (Sandbox Code Playgroud)
也就是说,as_datetime使用给定的小时和分钟并添加通用时间“UTC”作为时区。提供时区 CEST 代替
t1 = as_datetime(t0, tz = "CEST"); t1
## [1] "2021-09-23 10:00:00 CEST"
Run Code Online (Sandbox Code Playgroud)
也就是说,改变时间,这是我不想要的。
我想要得到的(我真正需要的)是“2021-09-23 12:00:00 CEST”,即更改时区而不更改时间。
我尝试force_tz过with_tz,但这也不起作用。
我还想知道为什么 'lubridate' 将 12:00:00 UST 转换为 10:00:00 CEST,因为 CEST 与 GMT+2 相同,而 UTC 是 GMT+0,所以结果实际上应该是相反的大约。
谢谢你的帮助。
我想在ubuntu上安装R中的lubridate函数.我收到了以下错误.从其他来源了解这与我的系统有关.你能帮我解决这个问题:
> install.packages('lubridate')
Installing package(s) into ‘/home/leader/R/i686-pc-linux-gnu-library/2.15’
(as ‘lib’ is unspecified)
trying URL 'http://cran.rstudio.com/src/contrib/lubridate_1.3.2.tar.gz'
Content type 'application/x-gzip' length 284897 bytes (278 Kb)
opened URL
==================================================
downloaded 278 Kb
* installing *source* package ‘lubridate’ ...
** package ‘lubridate’ successfully unpacked and MD5 sums checked
** R
** data
** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
Error in setClass("Period", contains = c("Timespan", "numeric"), slots = c(year = "numeric", :
unused argument(s) (slots = c(year = …Run Code Online (Sandbox Code Playgroud) 作为一个R新手,我正在试图调试神秘的R错误.我有一个包含150k行的csv,我加载到一个名为'date'的数据框中.然后我使用lubridate将此字符列转换为日期时间,以期找到最小/最大日期.
dates <- csv[c('datetime')]
dates$datetime <- ymd_hms(dates$datetime)
Run Code Online (Sandbox Code Playgroud)
运行此代码我收到以下错误消息:
Warning message:
3 failed to parse.
Run Code Online (Sandbox Code Playgroud)
我接受这个,因为CSV可以在那里和下一次运行中有一些janky日期:
min(dates$datetime)
max(dates$datetime)
Run Code Online (Sandbox Code Playgroud)
这两个都返回NA,我假设它来自仍然存储在数据帧中的少数破碎日期.我已经四处寻找快速解决方案,甚至试图建立一个foreach循环来确定问题日期,但没有运气.什么是识别3个破碎日期的简单方法?
example date format: 2015-06-17 17:10:16 +0000
Run Code Online (Sandbox Code Playgroud) 我需要从具有这些性质的向量中提取开始年和结束年。
yr<- c("June 2013 – Present (2 years 9 months)", "January 2012 – June 2013 (1 year 6 months)","2006 – Present (10 years)","2002 – 2006 (4 years)")
yr
June 2013 – Present (2 years 9 months)
January 2012 – June 2013 (1 year 6 months)
2006 – Present (10 years)
2002 – 2006 (4 years)
Run Code Online (Sandbox Code Playgroud)
我期望这样的输出。有人有建议吗?
start_yr end_yr
2013 2016
2012 2013
2006 2016
2002 2006
Run Code Online (Sandbox Code Playgroud) 给定:一个简单的4x2数据帧,其中填充了字符类型的数据
目标:相同的数据框,但所有值均替换为对它们应用以下lubridate函数调用的结果: parse_date_time(df, orders = c ("ymd_hms", "mdy_hms"), tz = "ETZ")
似乎使用lapply可以正常工作。使用sapply时,parse_date_time函数返回奇怪的大整数。
数据如下:
df <- as.data.frame(stringsAsFactors = FALSE, matrix(c("2014-01-13 12:08:02", "2014-01-13 12:19:46", "2014-01-14 09:59:09", "2014-01-14 10:05:09", "6-18-2016 17:43:42", "6-18-2016 18:06:59", "6-27-2016 12:16:47", "6-27-2016 12:29:05"), nrow = 4, ncol = 2, byrow = TRUE))
colnames(df) <- c("starttime", "stoptime")
这是sapply调用:
df2 <- sapply(df, FUN = function(column) {
parse_date_time(column, orders = c("ymd_hms", "mdy_hms"), tz = "ETZ")
})
和讨厌的电话:
df2 <- lapply(df, FUN = function(column) {
parse_date_time(column, orders = c("ymd_hms", "mdy_hms"), tz = "ETZ") …
我有一个超过100列的数据集,但是例如,假设我有一个看起来像
dput(tib)
structure(list(f_1 = c("A", "O", "AC", "AC", "AC", "O", "A", "AC", "O", "O"), f_2 = c("New", "New",
"New", "New", "Renewal", "Renewal", "New", "Renewal", "New",
"New"), first_dt = c("07-MAY-18", "25-JUL-16", "09-JUN-18", "22-APR-19",
"03-MAR-19", "10-OCT-16", "08-APR-19", "27-FEB-17", "02-MAY-16",
"26-MAY-15"), second_dt = c(NA, "27-JUN-16", NA, "18-APR-19",
"27-FEB-19", "06-OCT-16", "04-APR-19", "27-FEB-17", "25-APR-16",
NA), third_dt = c("04-APR-16", "21-JUL-16", "05-JUN-18", "18-APR-19",
"27-FEB-19", "06-OCT-16", "04-APR-19", "27-FEB-17", "25-APR-16",
"19-MAY-15"), fourth_dt = c("05-FEB-15", "25-JAN-16", "05-JUN-18",
"10-OCT-18", "08-JAN-19", "02-SEP-16", "24-OCT-18", "29-SEP-16",
"27-JAN-15", "14-MAY-15"), fifth_dt = structure(c(1459728000,
1469059200, 1528156800, 1555545600, …Run Code Online (Sandbox Code Playgroud)