Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 广播和日期_R_Date_Format_Dcast - Fatal编程技术网

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
vs
TP
,并在单元格中显示日期

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)