通过匹配名称加载CSV,并通过加工标签名称获取特定的Cols

时间:2017-09-10 20:24:00

标签: r csv

我有两个数据框,其中包含" TagNames"和" FileNames"我在目录中有CSV文件。我需要使用" FileNames"逐个打开csv文件。然后通过匹配" TagNames"从CSV文件中获取列,将它们附加到"结果"数据框并移至下一个CSV文件(重复)。 注意:我还必须处理日期和时间,因为来自不同文件的记录必须根据日期和时间放置。

TagNames和文件名如下:Tag Names and File Names

文件目录和数据如下所示:Files Directory and Data Shape in CSV

我的R脚本是这样的:

basepath <- dirname(rstudioapi::getActiveDocumentContext()$path)
# Load the Data
basepath <- dirname(rstudioapi::getActiveDocumentContext()$path)
FilesDF <- read.csv("Config/Files.csv")
TagsDF <- read.csv("Config/Tags.csv")

FilesList <- list(FilesDF)
TagsList <- list(TagsDF)

extractData <- function(x) {
result <- NULL;
temp <- NULL;
for (i in 1:nrow(x)) {
new_df <- read.csv(file=x$FileNames[i,], header=TRUE, sep=",")
for(j in q:ncol(new_df))
{
  temp <- rbind(temp, new_df[which(new_df[1,j])==TagsList$Tag.Names[i,]])
}
result <- rbind(result, temp)
temp <- NULL
}
return(result)
}
df_combined <- lapply(FilesList, extractData)
write.csv(df_combined, file = "UreaSVR2.csv")

1 个答案:

答案 0 :(得分:0)

在基地R中会使用类似的东西:

rbind(lapply(lapply(fileList, read.csv), subset, select = TagsList))

内部lapply()读入列表中的所有文件,外部subset读取数据并使用select参数,该参数接收列名称的向量。最后,rbind将列表合并为一个data.frame

我可能会自己使用purrrdplyr,但我写得更像这样:

map(fileList, read.csv) %>% map_df(select, TagNames)

相关问题