R:循环访问数据帧和子集

时间:2014-05-02 15:32:57

标签: r for-loop

我有许多具有相同结构的数据帧(从CSV导入)。我想循环遍历所有这些数据框,并只保留其中两列。

下面的循环似乎不起作用,任何想法为什么?理想情况下,我希望使用循环,因为我正在努力使用它们。

frames <- ls()

for (frame in frames){ 
frame   <- subset(frame, select = c("Col_A","Col_B"))
 }

提前为任何建议干杯。

2 个答案:

答案 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")))
}