将 CSV 动态分配给 R 中 for 循环中的对象

问题描述 投票:0回答:1

我正在尝试分析去年的月度报表,这些报表采用 CSV 文件的形式。我尝试的代码如下。我想一次性导入它们,将它们分配给一个对象,然后过滤它们以删除一些不相关的数据。目前,它向我抛出一个错误,因为找不到“月份”列表中的对象。我尝试将它们更改为字符串,但出现了不同的错误。

我的理想输出是列出作为以月份命名的数据框对象的每个月的 CSV。

这是我的第一篇文章,因此如果格式不当或缺乏细节,请告诉我还需要提供什么,我将编辑这篇文章。请帮助这个菜鸟。

library(readr)
library(dplyr)

Months <- c(Jan, Feb, Mar, Apr, May, Jun, 
       Jul, Aug, Sep, Oct, Nov, Dec)

fileN <- c("2023-01-01", "2023-02-01", "2023-03-01", 
      "2023-04-01", "2023-05-01", "2023-06-01", 
      "2023-07-01", "2023-08-01", "2023-09-01", 
      "2023-10-01", "2023-11-01", "2023-12-01")

dir = "/R/" #I have anonymised this directory for privacy reasons

for(i in 1:12){
  FileP <- paste0(dir,fileN[i],".csv")
  Months[i] <- read_csv(FileP, show_col_types = F)
  Months[i] <- Months[i] %>% filter(
    Months[i]$`Transaction Type` != "Internal Transfer" &
    Months[i]$Amount < 0)
  }

运行时报此错误:

UseMethod(“filter”) 中的错误:
没有适用于“列表”类对象的“过滤器”方法 另外:警告消息: 以月为单位[i] <- read_csv(FileP, show_col_types = F) : number of items to replace is not a multiple of replacement length

r csv analysis
1个回答
0
投票

您必须这样调用每月的每个元素:

for(i in 1:12){
  FileP <- paste0(dir,fileN[i],".csv")
  Months[i] <- read_csv(FileP, show_col_types = F)
  Months[i] <- Months[[i]] %>% filter(
    Months[[i]]$`Transaction Type` != "Internal Transfer" &
    Months[[i]]$Amount < 0)
  }

请注意,我使用

Months[[i]]
而不是
Months[i]
提取列表中的每个元素,因为后者返回长度为 1 的列表,而前者返回与列表中第 i 个元素对应的数据帧。

© www.soinside.com 2019 - 2024. All rights reserved.