繁体   English   中英

自定义 csv 导入并合并 function 用于 r 中的多个文件

Custom csv import and merge function for multiple files in r

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有超过 100 个包含此类数据的 csv 文件...

> dput(head(hobo.temp))
structure(list(Serial = c("Plot Title: 20461693", "#", "1", 
"2", "3", "4"), Date = c("", "Date Time, GMT-05:00", "02/14/20 10:14:50 AM", 
"02/14/20 10:14:57 AM", "02/14/20 11:14:50 AM", "02/14/20 12:14:50 PM"
), Temp = c("", "Temp, °C (LGR S/N: 20461693, SEN S/N: 20461693)", 
"18.866", "", "20.817", "20.913"), X1 = c("", "Coupler Detached (LGR S/N: 20461693, SEN S/N: 20461693)", 
"", "Logged", "", ""), X2 = c("", "Coupler Attached (LGR S/N: 20461693, SEN S/N: 20461693)", 
"", "", "", ""), X3 = c("", "Host Connected (LGR S/N: 20461693, SEN S/N: 20461693)", 
"", "", "", ""), X4 = c("", "End Of File (LGR S/N: 20461693, SEN S/N: 20461693)", 
"", "", "", "")), row.names = c(NA, 6L), class = "data.frame")

这很讨厌,所以我写了代码来清理它......

hobo.temp <- read.csv("20461693_suw_main_01_19_2021.csv",
                      colClasses = c(rep("character", 3), rep("NULL", 4)),
                      col.names = c("Serial", "Date", "Temp", 1, 2, 3, 4), 
                      header = FALSE, fill = TRUE, stringsAsFactors = FALSE)
hobo.temp$Date = as.POSIXct(hobo.temp$Date,  format="%m/%d/%y %H:%M")
hobo.temp[,1] <- hobo.temp[1,1]
hobo.temp <- hobo.temp[-c(1:4),]
hobo.temp <- na.omit(hobo.temp)
hobo.temp <- arrange(hobo.temp, Date)
row.names(hobo.temp) <- NULL
hobo.temp$Serial <- gsub("Plot Title: ", "", hobo.temp$Serial, fixed = TRUE)
hobo.temp$Temp <- as.numeric(hobo.temp$Temp)
return(hobo.temp)

但是当我尝试将其转换为 function 并使用此代码对其进行迭代时。

filenames <- list.files(path = ".", pattern='^.*\\.csv$')

hobo.read <- function(fnam) {
  hobo.temp <- read.csv(fnam, colClasses = c(rep("character", 3), rep("NULL", 4)),
                        col.names = c("Serial", "Date", "Temp", 1, 2, 3, 4), 
                        header = FALSE, fill = TRUE, stringsAsFactors = FALSE)
  hobo.temp$Date = as.POSIXct(hobo.temp$Date,  format="%m/%d/%y %H:%M")
  hobo.temp[,1] <- hobo.temp[1,1]
  hobo.temp <- hobo.temp[-c(1:4),]
  hobo.temp <- na.omit(hobo.temp)
  hobo.temp <- arrange(hobo.temp, Date)
  row.names(hobo.temp) <- NULL
  hobo.temp$Serial <- gsub("Plot Title: ", "", hobo.temp$Serial, fixed = TRUE)
  hobo.temp$Temp <- as.numeric(hobo.temp$Temp)
  return(hobo.temp)
}

my.df <- do.call("rbind", lapply(filenames, hobo.read))

我收到这个错误

 Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  more columns than column names 

我在编写函数方面很糟糕,所以我提前道歉。

1 个回复

我意识到其中一些文件有 8 列。 我认为这可能是这种情况,并试图用我原来的问题代码colClasses = c(rep("character", 3), rep("NULL", 4))当我将 4 切换为 5 in ```rep("NULL", 5)),它正确地取消了第 8 列。 我修改了我原来的问题代码,使其更具可读性(也许)。 这是我的第一个真正的 function,它嵌套启动。 这很草率,但我为此感到自豪。


    #reads filenames from 
filenames <- list.files(path = ".", pattern='^.*\\.csv$')

#first function imports data
hobo.read <- function(x) {
  #in... rep("NULL", 5)... 5 has to be larger than the number for columns in the csv with the largest number of columns
  df1 <- read.csv(x, colClasses = c(rep("character", 3), rep("NULL", 5)),
                        col.names = c("Serial", "Date", "Temp", 1, 2, 3, 4), 
                        header = FALSE, fill = TRUE, stringsAsFactors = FALSE)
  # line applies the action function below
  df2 <- hobo.fix(df1)
  
}

#function of actions to apply within 1st function
hobo.fix <- function(hobo.temp) {
  hobo.temp[,1] <- hobo.temp[1,1]
  hobo.temp <- hobo.temp[-c(1:4),]
  hobo.temp$Serial <- gsub("Plot Title: ", "", hobo.temp$Serial, fixed = TRUE)
  hobo.temp$Temp <- as.numeric(hobo.temp$Temp)
  hobo.temp$Date = as.POSIXct(hobo.temp$Date,  format="%m/%d/%y %H:%M")
  hobo.temp <- na.omit(hobo.temp)
  hobo.temp <- dplyr::arrange(hobo.temp, Date)
  row.names(hobo.temp) <- NULL
  return(hobo.temp)
}


hobo <- do.call("rbind", lapply(filenames, hobo.read))

2 在R中使用循环导入和合并.csv文件

我有20个名为1.csv,2.csv,3.csv等的文件,我想读入R并使用rbind通过循环合并。 我已经尝试过下面的代码,但是在第二行中收到一条错误消息,提示意外的“ [”。 ...

3 如何在r中加载和合并多个.csv文件?

所以我在R上很新,现在我正在尝试加载多个.csv文件(~60左右),然后将它们合并在一起。 它们都有类似的列,它们的文件命名如下:dem_file_30,dem_file_31。 我一直在尝试在线使用脚本但是仍然遇到一些错误。 我相信我可以手工完成,但那真的很乏味。 例: ...

2017-05-08 22:53:38 2 5251   r/ csv/ merge
4 如何在R中导入和合并多个excel文件?

我试图将超过一百个excel文件导入到RStudio的环境中。 这些文件有类似的变量。 我创建了一个excel文件的目录(dir),然后尝试使用lapply从目录中读取所有文件。 但它总是显示: barishal_sw183.xlsx是目录中的第一行,这也是目录所引用文件夹的 ...

2019-04-19 00:10:18 1 42   r
6 在R中的一个大矩阵中加速加载和合并多个.csv文件

我在这里关注一些帖子如何在R中合并多个.csv文件? 在这里同时读取R中的许多CSV文件并将全部合并到一个数据帧中 我的目的基本上是相同的:在R中将一个很大的csv文件组合成一个大的矩阵倍数。我有这个解决方案,我想尽可能地加快速度: 这里是一个完全可复制的例子; 我有更多更大的文 ...

2016-11-24 10:29:54 3 169   r/ csv
7 从多个csv文件读取和合并数据

我有3个不同的文件:NewRush4.csv,NewRush5.csv,NewRush6.csv。 我正在尝试收集每个季节(4、5和6)的“全职领导者”。 我想读取每个文件中每个球员的名字,如果它们是重复的,则将它们合并,或者读取第一个文件,并将其与其他两个文件进行比较,以将它们合并。 ...

8 在 R 中读取和合并具有不同结构的多个 xlsx 文件

我想使用 R 读取和合并多个 (&gt;20) .xlsx 文件。 这就是我的 .xlsx 文件的外观。 我想将它们合并为一个带有标题“示例”、“X”、“Y”、“Z”、“A”、“B”、“C”的 df。 没有特定的顺序,但它应该包含所有内容。 我找到了一些解决方案,它们适用于具有相同结构的 . ...

2020-09-30 06:23:37 2 45   r
9 读取并合并R中的多个excel文件

这个问题和这个问题的答案已经存在,但我发现很难理解答案,因为我没有太多使用 R 的经验。 我有多个 excel 文件,我想将它们合并到一个数据表中。 每个 excel 文件的列数相同,但行长不同。 我将工作目录设置为包含所有 excel 文件的文件,并尝试使用以下代码: 但我得到了错误: find ...

10 Powershell脚本可导入,拼合和合并多个xml文件并导出为csv

各位勇敢的编码人员,您好,我需要整理,合并并转换为csv文件的大量xml文件,以导入到Excel中,然后将数据映射到另一个数据集中以用于更大的数据迁移。 我设法产生了一个脚本,该脚本收集给定文件夹中的所有xml文件,并将第一级元素输出到收集的csv文件中的新行。 问题是xml文件的结构( ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM