我有一个简单的数据框架
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和TP的表,并在单元格中显示日期。
basic_table <- dcast(myDataArm, SubjectID ~ ImgTP, value.var = "ScanDate",
fun.aggregate = function(x) lubridate::as_date(x), fill = 0)但是,表中的日期是以数字形式报告的。为什么它不能正确显示?
发布于 2020-03-21 08:42:45
你可以在基本R中使用reshape,它创建了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>备注
可重现形式的输入为:
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)发布于 2020-03-21 08:03:14
来自tidyr的pivot_wider函数是一种选择。
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“出现在宽泛的变量名中。
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-23https://stackoverflow.com/questions/60782892
复制相似问题