R 中的数据转换 "proc transpose" 等效
Data transformation "proc transpose" equivqlent in R
大家好,我是新来的,我有以下数据集
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 中的等效代码
谢谢
这不是一个直接的答案,但 Hadley 在 tidyr github 问题中提供了这些示例。
https://github.com/tidyverse/tidyr/issues/149
他对 SO 问题的链接:
;
这可能会让您入门。
# 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 中创建数据,并创建您想要的输出。您的数据不是最少的,因为您没有使用 "drug" 变量。
大家好,我是新来的,我有以下数据集
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 中的等效代码
谢谢
这不是一个直接的答案,但 Hadley 在 tidyr github 问题中提供了这些示例。 https://github.com/tidyverse/tidyr/issues/149
他对 SO 问题的链接: ;
这可能会让您入门。
# 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 中创建数据,并创建您想要的输出。您的数据不是最少的,因为您没有使用 "drug" 变量。