我无法在时间轴中绘制数据。我有3列数据。第一列是日期。第二列是“+”或“ - ”。 (“+”表示开始日期,“ - ”表示时间轴的结束日期)最后,第三列是事件的名称。仅供参考。这个数据非常长。
我猜第一步是为带有“+”的行创建第4列,并使用“ - ”填充行的“日期”列。然后用“ - ”删除行。然后我可以简单地使用timevis()命令。但我无法重塑数据。例如,对于事件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
答案 0 :(得分:1)
您可以在name
和date
上排列数据,以标记第1和第2(结束)记录。最后,将状态为+
和-
的数据加入:
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)