簡體   English   中英

在R中的一個循環中子集多個數據幀

[英]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.

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