R转换数据宽度,同时保持日期格式-整形或dcast

aiqt4smr  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(125)

尝试做一些简单的事情,并将这些数据广泛地转置,这样对于每个ID,我都将VisitNum {1,2,3}作为列标题,将CollectionDate作为值。

在我开始的时候,Collection date是一个字符变量,VisitNum是数字变量。我在下面的代码中尝试了导入它们和使用不同的格式:

visit2$CollectionDate <- as.Date(visit2$CollectionDate, "%m-%d-%Y")
visit2$VisitNum <- as.character(visit2$VisitNum)

我试过dcast,得到了下面的结果。这是我想要的 Dataframe ,但日期不再格式化了。

visit_long_a<- dcast(visit2, ParticipantID ~ VisitNum, value.var = "CollectionDate")
Aggregation function missing: defaulting to length

然后用reshape得到了更奇怪的结果。我不明白为什么要把列连接起来。
visit_long_a <- reshape(visit2, direction = "wide", idvar = "ParticipantID", timevar = "VisitNum")

mwyxok5s

mwyxok5s1#

这是您正在寻找的输出吗?

library(tidyverse)

df <- tribble(
  ~ParticipantID, ~VisitNum, ~CollectionDa,
  11001,         1,  "11-22-2022",
  11002,         1,  "03-16-2023",
  11003,         1,  "11-29-2022",
  11008,         1,  "11-18-2022",
  11008,         2,  "02-21-2023",
  11010,         1,  "12-09-2022",
  11010,         2,  "03-10-2023"
)

pivot_wider(
  df,
  names_from = VisitNum,
  names_prefix = "VisitNum_",
  values_from = CollectionDa
)
#> # A tibble: 5 × 3
#>   ParticipantID VisitNum_1 VisitNum_2
#>           <dbl> <chr>      <chr>     
#> 1         11001 11-22-2022 <NA>      
#> 2         11002 03-16-2023 <NA>      
#> 3         11003 11-29-2022 <NA>      
#> 4         11008 11-18-2022 02-21-2023
#> 5         11010 12-09-2022 03-10-2023

创建于2023-03-23带有reprex v2.0.2

相关问题