如何解决如何将 df 从列表中分离出来
我有一个 df lst1 的列表。我想为每个主题 ID 生成一个 excel 文件,每个文件将包含多个工作表,它等于 lst 中的 df。最后,我想在 lst 中来自 dfs 的 col 名称上添加标签。
lst<-list(Demographics = structure(list(SubjectID = c("101-01-101","101-02-102","101-03-103","101-04-104","104-05-201"),BRTHDTC = c("1953-07-07","1963-07-02","1940-09-11","1955-12-31","1950-12-04"),SEX = c("Female","Female","Male","Female")),row.names = c(NA,-5L),class = c("tbl_df","tbl","data.frame")),diseaseStatus = structure(list(SubjectID = c("101-01-101",DSDT = c("2016-03-14","2017-04-04",NA,"2016-05-02","2018-07-06"),DSDT_P = c(NA,"UN-UNK-2015",NA)),Visits = structure(list(SubjectID = c("101-01-101",Visit = c("Screening: -28 Days to Day 1","Screening: -28 Days to Day 1","Screening: -28 Days to Day 1"
),VISND = c(NA_character_,NA_character_,NA_character_)),"data.frame")))
Label<-structure(list(Var = c("SubjectID","BRTHDTC","SEX","DSDT","DSDT_P","Visit","VISND"),label = c("Subject ID","Birthday","Gender","DS Date","DS Date Prob","Date of Visit","ND Visit"
)),-7L),"data.frame"))
IDlist = c("101-01-101","104-05-201")
结果应该看起来像……
out
$Demographics
# A tibble: 2 x 3
SubjectID BRTHDTC SEX
<chr> <chr> <chr>
1 Subject ID Birthday Gender
2 101-01-101 1953-07-07 Female
$diseaseStatus
# A tibble: 2 x 3
SubjectID DSDT DSDT_P
<chr> <chr> <chr>
1 Subject ID DS Date DS Date Prob
2 101-01-101 2016-03-14 <NA>
$Visits
# A tibble: 2 x 3
SubjectID Visit VISND
<chr> <chr> <chr>
1 Subject ID Date of Visit ND Visit
2 101-01-101 Screening: -28 Days to Day 1 <NA>
我拥有的代码是:
Indivadual_xlsx<-function(Subject_id){
lst %>% map(~ {nm1 <- deframe(Label)[names(.x)]; filter(.,SubjectID == Subject_id) %>%
bind_rows(as.list(setNames(names(nm1),nm1)),setNames(.,nm1)) })%>%
write.xlsx(paste0(Subject_id,".xlsx"))
}
IDlist %>% map(Indivadual_xlsx)
解决方法
我们可以在用 transpose
完成 match
之后 deframe
library(dplyr)
library(purrr)
library(tibble)
lst1 <- map(lst,~ .x %>%
split(.$SubjectID) %>%
map(~ bind_rows(as.list(deframe(Label)[names(.x)]),.x) )) %>%
transpose
-检查
第一个 list
元素的输出
lst1[[1]]
$Demographics
# A tibble: 2 x 3
SubjectID BRTHDTC SEX
<chr> <chr> <chr>
1 Subject ID Birthday Gender
2 101-01-101 1953-07-07 Female
$DiseaseStatus
# A tibble: 2 x 3
SubjectID DSDT DSDT_P
<chr> <chr> <chr>
1 Subject ID DS Date DS Date Prob
2 101-01-101 2016-03-14 <NA>
$Visits
# A tibble: 2 x 3
SubjectID Visit VISND
<chr> <chr> <chr>
1 Subject ID Date of Visit ND Visit
2 101-01-101 Screening: -28 Days to Day 1 <NA>
然后,我们通过循环 write.xlsx
list
元素上使用 list
library(openxlsx)
imap(lst1,~ write.xlsx(.x,file.path("C:/document",sprintf("subject_%s.xlsx",.y))))
excel 文件名将是“IDlist”元素的名称,工作表名称将是内部列表元素的名称,即“Demographics”、“DiseaseStatus”和“Visits”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。