我正在努力创建用于导入SAS数据文件的有效代码。
我的代码如下:
library(foreign)
library(haven)
f <- file.path(path = "E:/Cohortdata/Raw cohort/Nationalscreeningcohort/01.jk",
c("nhis_heals_jk_2002.sas7bdat","nhis_heals_jk_2003.sas7bdat" ,"nhis_heals_jk_2004.sas7bdat",
"nhis_heals_jk_2005.sas7bdat","nhis_heals_jk_2006.sas7bdat","nhis_heals_jk_2007.sas7bdat",
"nhis_heals_jk_2008.sas7bdat","nhis_heals_jk_2009.sas7bdat","nhis_heals_jk_2010.sas7bdat", "nhis_heals_jk_2011.sas7bdat","nhis_heals_jk_2012.sas7bdat","nhis_heals_jk_2013.sas7bdat"))
d <- lapply (f, read_sas)
我知道用for循环重写会更有效,但是不知道代码的样子
如果您能帮助我,我将非常感激。
答案 0 :(得分:2)
这是我发布的here代码的一种变体,但是您也可以将其用于SAS文件。
请注意,我使用file.path()
而不是使用list.files()
。这样一来,我就可以读取路径"E:/Cohortdata/Raw cohort/Nationalscreeningcohort"
中的所有文件,该位置是我假设您的文件所在的位置。另外,我使用参数pattern
仅查找sas7bdat
文件。
list.files()
返回一个向量,您可以在此处使用所需的*apply
方法。但是,我喜欢将vector
更改为tbl_df
,并喜欢使用tidyverse
方法。这意味着使用purrr::map()
(tidyverse
的一部分)读取所有文件,并为所有文件创建大数据tbl_df
。
library(tidyverse)
library(foreign)
library(haven)
df <- list.files(path = "E:/Cohortdata/Raw cohort/Nationalscreeningcohort",
full.names = TRUE,
recursive = TRUE,
pattern = "*.sas7bdat") %>%
tbl_df() %>%
mutate(data = map(value, read_sas)) %>%
unnest(data)