[英]Subset multiple dataframes in a loop in R
我正在嘗試從導入的20多個數據框中刪除列。 但是,嘗試遍歷所有這些文件時出現錯誤。 當我對單個文件名進行硬編碼時,我可以刪除,但是當我嘗試遍歷所有文件時,就會出現錯誤。 這是代碼:
path <- "C://Home/Data/"
files <- list.files(path=path, pattern="^.file*\\.csv$")
for(i in 1:length(files))
{
perpos <- which(strsplit(files[i], "")[[1]]==".")
assign(
gsub(" ","",substr(files[i], 1, perpos-1)),
read.csv(paste(path,files[i],sep="")))
}
mycols <- c("test," "trialruns," "practice")
`file01` = `file01`[,!(names(`file01`) %in% mycols)]
因此,以上方法將起作用,並將其從file01中刪除這三列。 但是,我無法遍歷file02到files20並刪除所有列。 有任何想法嗎? 非常感謝!
正如@ zx8754所提到的,請考慮lapply()
維護一個編譯列表中的所有數據幀,而不是環境中的多個對象(但以下內容還包括如何從列表中輸出單個dfs):
path <- "C://Home/Data/"
files <- list.files(path=path, pattern="^.file*\\.csv$")
mycols <- c("test," "trialruns," "practice")
# READ IN ALL FILES AND SUBSET COLUMNS
dfList <- lapply(files, function(f) {
read.csv(paste0(path, f))[mycols]
})
# SET NAMES TO EACH DF ELEMENT
dfList <- setNames(dfList, gsub(".csv", "", files))
# IN CASE YOU REALLY NEED INDIVIDUAL DFs
list2env(dfList, envir=.GlobalEnv)
# IN CASE YOU NEED TO APPEND ALL DFs
finaldf <- do.call(rbind, dfList)
# TO RETRIEVE FIRST DF
dfList[[1]] # OR dfList$file01
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.