我有许多具有相同结构的数据帧(从CSV导入)。我想循环遍历所有这些数据框,并只保留其中两列。
下面的循环似乎不起作用,任何想法为什么?理想情况下,我希望使用循环,因为我正在努力使用它们。
frames <- ls()
for (frame in frames){
frame <- subset(frame, select = c("Col_A","Col_B"))
}
提前为任何建议干杯。
答案 0 :(得分:1)
对于任何感兴趣的人,我使用Richard Scriven的想法,将数据帧作为一个对象读取,添加了一个函数,显示文件的导入位置。这使我可以使用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))
答案 1 :(得分:0)
基本问题是ls()返回环境中所有对象名称的字符向量,而不是对象本身。要使用包含其名称的字符变量来获取和替换对象,可以使用get()/ assign()函数。您可以将您的功能重写为
frames <- ls()
for (frame in frames){
assign(frame, subset(get(frame), select = c("Col_A","Col_B")))
}