2013-11-14 56 views
0

我接收到包含具有相同变量的数据的3个数据帧(训练,验证和测试)。我宁愿他们不要被包含在一个列表中,这样我可以称它们为整齐trnvldtst而不是list[[1]]在R中迭代更改数据帧

我需要从所有数据集中下降的变量。有没有一种方法可以在不首先创建列表的情况下进行迭代处理,迭代,然后从列表中重新创建数据框?即目前我在做喜欢做的事,如:

trn <- read.csv("training_split_60pct.csv") 
vld <- read.csv("validation_split_20pct.csv") 
tst <- read.csv("test_split_20pct.csv") 

# a list of variables to drop 
drops <- c("ONE", "TWO", "THREE", "FOUR") 

dfRawList <- list(trn, vld, tst) 
dfList <- lapply(dfRawList, function(df) df[,!(names(df) %in% drops)]) 
names(dfList) <- c("trn", "vld", "tst") 

trn <- dfList[["trn"]] 
vld <- dfList[["vld"]] 
tst <- dfList[["tst"]] 

但我希望能够做到:

trn <- read.csv("training_split_60pct.csv") 
vld <- read.csv("validation_split_20pct.csv") 
tst <- read.csv("test_split_20pct.csv") 

# a list of variables to drop 
drops <- c("ONE", "TWO", "THREE", "FOUR") 

for (df in c('trn', 'vld', 'tst')){ 
    df <- lapply(df, function(df) df[,!(names(df) %in% drops)]) 
} 

当然,这只是创建与tst数据一个数据帧。

+0

您似乎知道R中推荐的方法,我建议使用它。 – Roland

+0

@shadow:谢谢你的回答。我对R很新,很抱歉。有没有一些例子说明为什么这是推荐的? – kungfujam

回答

2

您可以使用assignget来做到这一点。但我会建议您使用列表和lapply,因为你现在正在做。

for (df in c("trn", "vld", "tst")){ 
    assign(df, get(df)[, !names(get(df)) %in% drops]) 
}