2016-12-29 42 views
0

创建数据表,让我们说我有一个data.table使用循环

DT=data.table(name = sample(letters[1:25],30,replace=T), value =rnorm(3000)) 

我想分裂DT的名称,并创建新的DTS,如姓名DT_a,对应的名称值DT_b。那我该怎么办呢?

回答

0

试试这个:

DTs = split(DT, DT$name) 
lapply(names(DTs), function(x) assign(paste0('DT_',x), DTs[[x]], envir=.GlobalEnv)) 
+0

Thx的工作! – VincentLin

+0

我有一个问题,为什么要添加.globalenv?我试图删除它,并返回了错误的结果 – VincentLin

+2

没有它,分配只发生在函数“内部”。同样的原因,'f = function(){x = 5}; f()'不能创建一个变量'x' – sirallen

0

我们可以使用list2env

lst <-split(DT, DT$name) 
list2env(setNames(lst, paste0("DT_", names(lst))), envir = .GlobalEnv) 

不过,建议保持在一个list,而不是在全球环境中创建多个数据集。但是,如果这只是为了了解创建对象的可能性,则可以使用list2env

+1

Thx,也可以工作 – VincentLin

+0

Downvoter,我刚刚修改了一些建议如果你想改变downvote,欢迎你。 – akrun