r - 如何构建一个循环数据帧并转换其中数据的函数 (R)

标签 r excel function dataframe for-loop

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

我用 4 行代码得到了这个,理论上我可以为每个工作表复制并粘贴这个 block (总共 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 放入函数/循环中吗?

最佳答案

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

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 中的数据帧列表。

关于r - 如何构建一个循环数据帧并转换其中数据的函数 (R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61007807/

相关文章:

java - 如何以编程方式在Excel中插入符号 'Infinite'?

在不丢失函数之前拥有的数据的情况下调用函数?

excel - 如何将左括号后的第一个字母大写并应用于整个工作表?

java - 在 Java Web 应用程序中读取 Excel 文件时出现字符编码问题

function - 我如何能够从有状态小部件在无状态小部件中传递 setState

jquery - Crystal 选择在第一次赢或输后记为输

使用 Photon 的 R Shiny 独立应用程序

r - 如何绘制具有精确起点和终点的弯曲箭头?

R 效率挑战 : Splitting a long character vector

R:更新 data.table 中的列