我有許多數據幀(從CSV導入)具有相同的結構。我想遍歷所有這些數據框並只保留其中的兩列。R:循環遍歷數據框和子集
下面的循環似乎沒有工作,任何想法爲什麼?最好喜歡用循環來做這個,因爲我試圖更好地使用這些循環。
frames <- ls()
for (frame in frames){
frame <- subset(frame, select = c("Col_A","Col_B"))
}
爲任何建議提前歡呼。
我有許多數據幀(從CSV導入)具有相同的結構。我想遍歷所有這些數據框並只保留其中的兩列。R:循環遍歷數據框和子集
下面的循環似乎沒有工作,任何想法爲什麼?最好喜歡用循環來做這個,因爲我試圖更好地使用這些循環。
frames <- ls()
for (frame in frames){
frame <- subset(frame, select = c("Col_A","Col_B"))
}
爲任何建議提前歡呼。
任何有興趣我以前讀的dataframes作爲一個對象,具有功能補充,表明該文件已經從進口理查德斯克裏芬的想法。這讓我然後使用Plyr包操作數據:
library(plyr)
dataframes <- list.files(path = TEESMDIR, full.names = TRUE)
## Define a function to add the filename to the dataframe
read_csv_filename <- function(filename){
ret <- read.csv(filename)
ret$Source <- filename #EDIT
ret
}
list_dataframes <- ldply(dataframes, read_csv_filename)
selection <- llply(list_dataframes, subset, select = c(var1,var3))
基本問題是ls()返回的是你的環境中所有對象名稱的字符向量,而不是對象本身。要使用包含名稱的字符變量來獲取和替換對象,可以使用get()/ assign()函數。你可以重新寫你的功能
frames <- ls()
for (frame in frames){
assign(frame, subset(get(frame), select = c("Col_A","Col_B")))
}
1)它是'list',不'ls'; 2)你需要爲幀提供索引,就像'frames [[frame]] < - subset(...)'; 3)「frame in frame」是沒有意義的,因爲你只是用'frames < - list()'創建了一個空列表 - 它應該像'for(frame in 1:5)' – rawr
好,除非你*意圖*列表爲'ls',我不推薦 – rawr
ls()部分工作正常:'frames'包含所有要操作的數據框的列表,但循環給出'argument 「子集」丟失,沒有默認' – Zfunk