【问题标题】:Data transformation "proc transpose" equivqlent in RR中等效的数据转换“proc transpose”
【发布时间】:2026-01-29 09:25:01
【问题描述】:

大家好,我是新来的,我有以下数据集

member_id<-c(603,603,603)
fill_date<-c("02/17/2005","06/13/2005","08/11/2005")
drug<-rep("a",3)
days_supply<-rep(30,3)
dataset<-data.frame(member_id,fill_date,drug,days_supply)

我想将数据转换为以下内容: Transformed data

在 sas 中我使用这个代码:

    proc sort data=claims;
       by member_id fill_dt;
       run;
    proc transpose data=claims out=fill_dates (drop=_name_) prefix=fill_dt;
    by member_id;
    var fill_dt;
    run;

    proc transpose data = claims out=days_supply (drop=_name_) prefix = days_supply;
    by member_id;
    var days_supply;
    run;

    data both;
    merge fill_dates days_supply;
    by member_id;
    format start_dt end_dt mmddyy10.;
    start_dt=fill_dt1;
    end_dt=fill_dt1+179;
    run;

我想知道你是否可以帮助处理 R 中的等效代码

谢谢

【问题讨论】:

  • 寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。数据图片没有帮助,因为我们必须重新输入它们才能使用它们。
  • Obs member_id fill_dt drug days_supply 946 603 02/17/2005 a 30 947 603 06/13/2005 a 30 948 603 08/11/2005 a 30
  • ?reshape
  • 那些 cmets 相当不可读。您应该编辑您的问题以添加具有正确代码格式的行。
  • 已完成感谢您的评论

标签: r medical


【解决方案1】:

这不是一个直接的答案,但 Hadley 在 tidyr github 问题中提供了这些示例。 https://github.com/tidyverse/tidyr/issues/149

他对 SO 问题的链接: http://*.com/questions/24929954; http://*.com/questions/27247078

【讨论】:

    【解决方案2】:

    这可能会让您入门。

    # in case you don't have those packages installed
    install.packages("reshape2")
    install.packages("tidyverse")
    
    library(reshape2)
    library(tidyverse)
    
    
    member_id<-c(603,603,603)
    fill_dt<- c("2005-02-17", "2005-06-13", "2005-08-11")
    days_supply<-rep(30,3)
    dataset<-data.frame(member_id,fill_dt,days_supply)
    
    
    
    
    dataset_melt <- melt( data =dataset, id.vars = "member_id" )
    dataset_melt <- dataset_melt %>% group_by(variable) %>% mutate( variable_n = paste0( variable, row_number() ))
    
    dataset_cast <- data.table::dcast( data = dataset_melt, formula = member_id ~  variable_n, value.var =c("value")  )
    dataset_cast <- dataset_cast %>% mutate( start_dt = as.Date(fill_dt1), 
                                             end_dt   = start_dt + 179 )
    
    dataset_cast
    

    为了获得更好的帮助,我建议创建一个可重复性最低的示例,说明您在 SAS 中所做的事情。这意味着 SAS 代码在 SAS 中创建数据,并创建您想要的输出。您的数据不是最少的,因为您不使用“药物”变量。

    【讨论】: