迭代地改变R中的数据帧

时间:2013-11-14 11:25:57

标签: r

我收到3个包含相同变量数据的数据框(训练,验证和测试)。我希望它们不被包含在列表中,以便我可以将它们整齐地称为trnvldtst,而不是list[[1]]等。 / p>

我需要从所有数据集中删除变量。有没有办法迭代处理而不先创建列表,迭代,然后从列表中重新创建数据框?即我现在喜欢做类似的事情:

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数据的数据框。

1 个答案:

答案 0 :(得分:2)

您可以使用assignget来完成此操作。但我建议您使用目前正在执行的列表和lapply

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