我有两个数据框,其中包含" 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")
答案 0 :(得分:0)
在基地R中会使用类似的东西:
rbind(lapply(lapply(fileList, read.csv), subset, select = TagsList))
内部lapply()
读入列表中的所有文件,外部subset
读取数据并使用select
参数,该参数接收列名称的向量。最后,rbind
将列表合并为一个data.frame
。
我可能会自己使用purrr
和dplyr
,但我写得更像这样:
map(fileList, read.csv) %>%
map_df(select, TagNames)