【问题标题】:How to build a function that loops through data frames and transforms the data in them (R)如何构建一个循环遍历数据帧并转换其中数据的函数(R)
【发布时间】:2020-07-15 09:10:24
【问题描述】:

我正在尝试从 Excel 电子表格导入数据,只选择一组工作表(不是所有工作表),然后执行几个数据转换步骤(旋转更长的时间并更改数据类型)。

我在 4 行代码中得到了这个,理论上我可以为每张纸复制并粘贴这个块(总共 8 行),但我想看看我是否可以用一个函数遍历这一切。

步骤如下:

1) 读取特定工作表并将其保存为数据框

2) 转轴时间更长,以 2:13 为单位

3) 将新列值从excel日期类型(数字)更改为实际日期

4) 将日期改为 yearmon 格式

这是我为一张纸执行此操作的代码:

kerrie <- read_excel("report.xlsx", sheet = "KERRIE_DATA") # load Kerrie data sheet
kerrie <- pivot_longer(kerrie, 2:13, names_to = "month") # put months into rows
kerrie$month <- excel_numeric_to_date(as.numeric(kerrie$month), date_system = "modern") # change date data type
kerrie$month <- as.yearmon(kerrie$month) # turn into yearmon

这是一个包含所有工作表名称的向量

sheetNames <- c("KERRIE_DATA", "GAIL_DATA", "DANIELLE_DATA", "ISABELLE_DATA","ESTELLE_DATA", "CLARE_DATA", "JEN_DATA", "CHRIS_DATA")

这是我为第 1 步找到的解决方案:它遍历 excel 工作簿并导入我想要的工作表,将它们保存为数据框

library(openxlsx)
a <- loadWorkbook("report.xlsx")
for(i in 1:length(sheetNames))
{
  assign(sheetNames[i],readWorkbook(a,sheet = i))
}

你能帮我把步骤 2:4 放到一个函数/循环中吗?

【问题讨论】:

    标签: r excel function dataframe for-loop


    【解决方案1】:

    你可以编写一个包含所有步骤的函数:

    apply_fun <- function(sheet_name) {
         kerrie <- readxl::read_excel("report.xlsx", sheet = sheet_name) 
         kerrie <- tidyr::pivot_longer(kerrie, 2:13, names_to = "month")
         kerrie$month <- janitor::excel_numeric_to_date(as.numeric(kerrie$month), 
                          date_system = "modern") 
         kerrie$month <- zoo::as.yearmon(kerrie$month) 
         return(kerrie)
    }
    

    并将其应用于所有工作表

    complete_data <- lapply(sheetNames, apply_fun)
    

    这将返回complete_data 中的数据框列表。

    【讨论】:

    • 这成功了,如果它对其他人有帮助,然后我添加了以下两行:complete_data
    猜你喜欢
    • 2021-11-22
    • 2017-12-14
    • 2021-12-25
    • 1970-01-01
    • 2020-11-02
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多