将转换应用于许多data.frame对象

时间:2015-11-16 17:33:04

标签: r dataframe

我想将转换应用于许多data.frame对象。我该怎么办?我以为我可以通过这些物体以某种方式循环,但到目前为止还没有结果。我想我可能需要将对data.frame对象的引用传递给列表或其他类型的集合,然后循环遍历这些引用。这在R中是否可能?

#reproducible data
foo=data.frame(c(1, 1), c(1, 1))
bar=data.frame(c(2, 2), c(2, 2))
#apply transformations
for (dat in list(foo, bar)){
    dat$NEW <- 9999
    print(dat)
}
#of course nothing happened since data.frames were copied to list object
print(foo) #no change
print(bar) #no change

#expected output
foo$NEW <- 9999
bar$NEW <- 9999
print(foo) #looks good 
print(bar) #looks good

1 个答案:

答案 0 :(得分:1)

您可以执行类似的操作并继续使用data.frames列表

foo=data.frame(a = c(1, 1), b = c(1, 1))
bar=data.frame(a = c(2, 2), b = c(2, 2))

dat <- list(foo = foo, bar = bar)
dat <- lapply(dat, function(x){
  x$NEW = 999
  x
})

现在dat看起来如下:

$foo
  a b NEW
1 1 1 999
2 1 1 999

$bar
  a b NEW
1 2 2 999
2 2 2 999

如果您想强制foodat$foo相同,则可以使用

mapply(assign, names(dat), dat, MoreArgs = list(envir = .GlobalEnv))

导致

> foo
  a b NEW
1 1 1 999
2 1 1 999

bar

相同