【问题标题】:Apply function to all dataframes将函数应用于所有数据框
【发布时间】:2020-05-11 13:44:11
【问题描述】:

我使用 SAS 文件 (sas7bdat = dataframes) 和 SAS 格式 (sas7bcat)。 我的 sas7bdat 文件位于“数据”文件中,因此我可以在对象 files_names 中获得一个列表。 这是我的代码的第一部分,运行良好

files_names <- list.files(here("data"))
nb_files <- length(files_names)
data_names <- vector("list",length=nb_files)

for (i in 1 : nb_files) {
  data_names[i] <- strsplit(files_names[i], split=".sas7bdat")
}

for (i in 1:nb_files) {
  assign(data_names[[i]], 
         read_sas(paste(here("data", files_names[i])), "formats/formats.sas7bcat")
  )}

但我在尝试从包 Haven 应用函数 as_factor 时遇到了一些问题(为了在我的新数据帧上应用标签并获得 SEX = "Male" 而不是 SEX = 1)。 我可以让它像下面的代码一样逐个数据帧地工作

df_labelled <- haven::as_factor(df, only_labelled = TRUE)

我想创建一个循环,但没有成功,因为我的 data_names[i] 不是数据框,而 as_factor 在第一个参数中需要一个数据框。

我对 R 很陌生,如果有人可以帮助我,非常感谢。

【问题讨论】:

    标签: r dataframe sas


    【解决方案1】:

    您可能想考虑使用不同的数据结构,例如,您可以使用命名列表来保存数据帧,然后您可以轻松地循环它们。

    事实上,你可以在一个循环中完成所有事情,我相信有一种更有效的方法可以做到这一点,但这里有一个示例,说明了一种无需过多更改代码的方法:

    files_names <- list.files(here("data"))
    
    raw_dfs <- list()
    labelled_dfs <- list()
    for (file_name in files_names) {
      # # strsplit returns a list either extract the first element
      # # like this
      # df_name <- (strsplit(file_name, split=".sas7bdat"))[[1]]
      # # or use something else like gsub
      df_name <- gsub(".sas7bdat", '', file_name)
      raw_dfs[df_name] <- read_sas(paste(here("data", file_name)), "formats/formats.sas7bcat")
      labelled_dfs[df_name] <- haven::as_factor(raw_dfs[[df_name]], only_labelled = TRUE)
    }
    

    【讨论】:

    • 行中的变量出现错误无效类型(列表):raw_dfs[df_name]
    • 对了,我忘了strsplit返回一个列表,请看编辑后的答案
    • 我无法完成这项工作。 raw_dfs[df_name] 仍然是一个列表,应该是一个数据框,我认为这就是问题所在。顺便感谢您的帮助
    • 是的,这是有意的,如果你想取消列出它,你应该用方括号将它作为子集,就像我在 as_factor 中所做的那样(即 raw_dfs[[df_name]])
    • 它确实通过在 raw_dfs[df_name] 和 labelled_dfs[df_name] 中再添加一个 [] 来工作。真的很感谢你的帮助:)
    猜你喜欢
    • 2017-03-09
    • 2020-03-29
    • 2021-07-22
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多