簡體   English   中英

使用for循環來匹配R中的數據幀對

[英]Using for loops to match pairs of data frames in R

我希望使用特定的功能合並數據幀對,以在R目錄中進行多個配對。 我正在嘗試編寫一個“ for循環”來為我完成這項工作,而相關問題(例如將多個data.frames合並為一個data.frame和一個循環)是有幫助的,但我正在努力為此示例調整示例循環采用。

我的數據幀以“ _df1.csv”或“ _df2.csv”結尾。 我希望合並為輸出數據幀的每對文件名的名稱相同(即543_df1.csv和543_df2.csv)。

我已經使用list.files命令為目錄中的兩種文件類型分別創建了一個字符串,如下所示:

df1files <- list.files(path="~/Desktop/combined files” pattern="*_df1.csv", full.names=T, recursive=FALSE)
df2files <- list.files(path="="~/Desktop/combined files ", pattern="*_df2.csv", full.names=T, recursive=FALSE)

我要應用以合並每對數據幀的功能和命令如下:

findRow <- function(dt, df) { min(which(df$datetime > dt )) }
rows <- sapply(df2$datetime, findRow, df=df1)
merged <- cbind(df2, df1[rows,])

我現在正嘗試將這些命令合並到for循環中,從以下幾行開始,以防止我不得不手動合並這些對:

for(i in 1:length(df2files)){ ……

我還不是一名R程序員,我還不是很堅強,並且碰壁了,所以任何幫助都將不勝感激。

我的直覺(我沒有機會檢查)是您應該能夠執行以下操作:

# read in the data as two lists of dataframes:
dfs1 <- lapply(df1files, read.csv)
dfs2 <- lapply(df2files, read.csv)

# define your merge commands as a function
merge2 <- function(df1, df2){
    findRow <- function(dt, df) { min(which(df$datetime > dt )) }
    rows <- sapply(df2$datetime, findRow, df=df1)
    merged <- cbind(df2, df1[rows,])
}

# apply that merge command to the list of lists
mergeddfs <- mapply(merge2, dfs1, dfs2, SIMPLIFY=FALSE)

# write results to files
outfilenames <- gsub("df1","merged",df1files)
mapply(function(x,y) write.csv(x,y), mergeddfs, outfilenames)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM