首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R dcast和日期

R dcast和日期
EN

Stack Overflow用户
提问于 2020-03-21 07:27:16
回答 2查看 292关注 0票数 0

我有一个简单的数据框架

代码语言:javascript
复制
    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

我想创建一个具有SubjectIDTP的表,并在单元格中显示日期。

代码语言:javascript
复制
basic_table <- dcast(myDataArm,  SubjectID ~ ImgTP, value.var = "ScanDate",
                      fun.aggregate = function(x) lubridate::as_date(x), fill = 0)

但是,表中的日期是以数字形式报告的。为什么它不能正确显示?

EN

回答 2

Stack Overflow用户

发布于 2020-03-21 08:42:45

你可以在基本R中使用reshape,它创建了ScanDate.B0形式的名称,所以我们删除了第二行中所有前面和包括圆点的内容,以获得更好的名称。

代码语言:javascript
复制
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>

备注

可重现形式的输入为:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2020-03-21 08:03:14

来自tidyr的pivot_wider函数是一种选择。

代码语言:javascript
复制
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 

您也可以使用reshape函数,但是"ScanDate“出现在宽泛的变量名中。

代码语言:javascript
复制
reshape(myDataArm, direction="wide", idvar = "SubjectID", 
                   v.names="ScanDate", timevar="ImgTP")


  SubjectID ScanDate.B0 ScanDate.PO ScanDate.W02 ScanDate.W06 ScanDate.W12 ScanDate.W24 ...
1    01-001  2019-06-28  2019-06-30   2019-07-09   2019-08-15   2019-09-13   2019-12-13
9    01-002  2019-07-25  2019-07-26   2019-08-15   2019-09-05   2019-10-24   2020-01-23
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60782892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档