R 广播和日期
我有一个简单的数据框架R 广播和日期,r,date,format,dcast,R,Date,Format,Dcast,我有一个简单的数据框架 SubjectID ImgTP ScanDate 1 01-001 B0 2019-06-28 2 01-001 PO 2019-06-30 3 01-001 W02 2019-07-09 4 01-001 W06 2019-08-15 5 01-001 W12 2019-09-13 6 01-001 W24 2019-12-13 7 01-001 INT01 2
SubjectID ImgTP ScanDate
1 01-001 B0 2019-06-28
2 01-001 PO 2019-06-30
3 01-001 W02 2019-07-09
4 01-001 W06 2019-08-15
5 01-001 W12 2019-09-13
6 01-001 W24 2019-12-13
7 01-001 INT01 2019-07-25
8 01-001 INT02 2019-10-25
9 01-002 B0 2019-07-25
10 01-002 PO 2019-07-26
11 01-002 W02 2019-08-15
12 01-002 W06 2019-09-05
13 01-002 W12 2019-10-24
14 01-002 W24 2020-01-23
我想创建一个表,该表具有SubjectID
vsTP
,并在单元格中显示日期
basic_table <- dcast(myDataArm, SubjectID ~ ImgTP, value.var = "ScanDate",
fun.aggregate = function(x) lubridate::as_date(x), fill = 0)
tidyr的
basic_table透视功能是一个选项
library(tidyr)
pivot_wider(myDataArm, names_from=ImgTP, values_from=ScanDate)
# A tibble: 2 x 9
SubjectID B0 PO W02 W06 W12 W24 INT01 INT02
<chr> <date> <date> <date> <date> <date> <date> <date> <date>
1 01-001 2019-06-28 2019-06-30 2019-07-09 2019-08-15 2019-09-13 2019-12-13 2019-07-25 2019-10-25
2 01-002 2019-07-25 2019-07-26 2019-08-15 2019-09-05 2019-10-24 2020-01-23 NA NA
您只需在base R中使用Reformate即可。它创建的表单名称为ScanDate.B0
,因此我们删除了第二行之前的所有内容,包括第二行中的点,以获得更好的名称
r <- reshape(myDataArm, dir = "wide", idvar = "SubjectID", timevar = "ImgTP")
names(r) <- sub(".*\\.", "", names(r))
r
## SubjectID B0 PO W02 W06 W12 W24 INT01 INT02
## 1 01-001 2019-06-28 2019-06-30 2019-07-09 2019-08-15 2019-09-13 2019-12-13 2019-07-25 2019-10-25
## 9 01-002 2019-07-25 2019-07-26 2019-08-15 2019-09-05 2019-10-24 2020-01-23 <NA> <NA>
r我假设您使用的是reformae2
包,它看起来像一个。我不认为这个软件包还在开发中,因此您可以尝试hadley在tidyverse
中使用的任何一种当月风格。有趣的是,如果您转换为data.table
:x@rawr。。。这个月的味道。哈哈,你太好了D:汉克斯,我现在明白错误了。它不能像我所需要的那样工作,与reshapenot配合使用效果最好不要与tidyr::spread(myDataArm、ImgTP、ScanDate)
!!
r <- reshape(myDataArm, dir = "wide", idvar = "SubjectID", timevar = "ImgTP")
names(r) <- sub(".*\\.", "", names(r))
r
## SubjectID B0 PO W02 W06 W12 W24 INT01 INT02
## 1 01-001 2019-06-28 2019-06-30 2019-07-09 2019-08-15 2019-09-13 2019-12-13 2019-07-25 2019-10-25
## 9 01-002 2019-07-25 2019-07-26 2019-08-15 2019-09-05 2019-10-24 2020-01-23 <NA> <NA>
Lines <- " SubjectID ImgTP ScanDate
1 01-001 B0 2019-06-28
2 01-001 PO 2019-06-30
3 01-001 W02 2019-07-09
4 01-001 W06 2019-08-15
5 01-001 W12 2019-09-13
6 01-001 W24 2019-12-13
7 01-001 INT01 2019-07-25
8 01-001 INT02 2019-10-25
9 01-002 B0 2019-07-25
10 01-002 PO 2019-07-26
11 01-002 W02 2019-08-15
12 01-002 W06 2019-09-05
13 01-002 W12 2019-10-24
14 01-002 W24 2020-01-23"
myDataArm <- read.table(text = Lines)
myDataArm$ScanDate <- as.Date(myDataArm$ScanDate)