r - R中的数据整理和创建时间线
问题描述
我无法在时间线上绘制我的数据。我有 3 列数据。第一列是日期。第二列是“+”或“-”。(“+”表示开始日期,“-”表示时间线结束日期)最后第三列是事件的名称。仅供参考。这个数据非常长。
我想第一步是为带有“+”的行创建第 4 列,并用带有“-”的行的“日期”列填充它。然后删除带有“-”的行。然后我可以简单地使用 timevis() 命令。但我无法重塑数据。因为例如对于事件 A,有几个“+”和“-”。我无法将“-”行的日期复制到前一个 A“+”。
date status name
01.01.2001 + A
02.01.2001 + B
02.01.2001 + C
03.01.2001 - B
04.01.2001 + B
07.01.2001 - A
09.01.2001 - C
11.01.2001 + A
13.01.2001 - B
有没有办法在同一行没有开始和结束日期的情况下绘制时间线?或者我如何格式化数据,如下所示;
date status name enddate
01.01.2001 + A 07.01.2001
02.01.2001 + B 03.01.2001
02.01.2001 + C 09.01.2001
04.01.2001 + B 13.01.2001
11.01.2001 + A NA
解决方案
您可以排列数据name
并date
标记第一个和第二个(结束)记录。最后,加入状态+
为的数据-
:
library(dplyr)
library(lubridate)
df_mod <- df %>% mutate(date = dmy(date)) %>%
group_by(name) %>%
arrange(name, date) %>%
mutate(discard = ifelse(row_number() == 1 & status=="-", TRUE, FALSE)) %>%
filter(!discard) %>% #discard if 1st row is "-".
group_by(name) %>%
mutate(RecNo = ceiling(row_number()/2)) %>%
select(-discard)
df_mod %>%
filter(status=="+") %>%
left_join(filter(df_mod, status == "-"), by=c("name","RecNo")) %>%
arrange(date.x) %>%
select(date = date.x, status = status.x, name, enddate = date.y, -RecNo, -status.y)
# # A tibble: 5 x 4
# # Groups: name [3]
# date status name enddate
# <date> <chr> <chr> <date>
# 1 2001-01-01 + A 2001-01-07
# 2 2001-01-02 + B 2001-01-03
# 3 2001-01-02 + C 2001-01-09
# 4 2001-01-04 + B 2001-01-13
# 5 2001-01-11 + A NA
数据:
df <- read.table(text =
"date status name
01.01.2001 + A
02.01.2001 + B
02.01.2001 + C
03.01.2001 - B
04.01.2001 + B
07.01.2001 - A
09.01.2001 - C
11.01.2001 + A
13.01.2001 - B",
stringsAsFactors = FALSE, header = TRUE)
推荐阅读
- arrays - 在 Julia 中访问复合类型内的数组
- electron - 删除应用程序卸载时的 localStorage 数据
- rust - 用藻箱定义 AdditiveGroup
- javascript - 将 Uint8 数组传递给 PDF.js 不起作用
- clojure - 如何通过clojure编写一个ansible yaml文件?
- windows - 在 Windows 10 上安装最新的 Metasploit
- android - 如何在 Android 上的 WebRTC 中获取远程音频流
- matlab - 如何导入 MVGC Multivariate Granger Causality Matlab® Toolbox 并使用它?
- google-api - Files.get 方法不返回完整的文件响应
- reactjs - 图片未显示在 heroku 部署的 React 应用程序上,但响应为 200