2016-04-28 69 views
-1

我想在for循环中创建一个data.frame。我想在该循环的迭代的矢量值中指定data.frame。R:在一个向量中的一个值后命名一个data.frame

矢量来自City列在State data.frame:

State 

City Zip 
A  1 
B  2 
C  3 

我曾尝试:

for(i in State$City){ 

i <- data.frame(sub=character(),street=character()) 
} 

这将命名data.frame i没有在价值向量。

i 

sub street 

如果是在循环中的第一次迭代,那么我会希望data.frame的名称为A

A 

sub street 

如果第二次迭代,然后B

如果第三次迭代,然后C

任何帮助将不胜感激请让我知道是否需要任何进一步的信息。

回答

0

这应该可以做到。使用assign

State = as.data.frame(list(City = c("A","B","C"), 
          ZIP = 1:3)) 
for(i in State$City){ 
    assign(i, data.frame(sub=character(),street=character())) 
} 
+0

我不确定为什么你得到了一个投票,你的答案完美无缺。谢谢。 – Dre

+1

@Dre它可能被拒绝投票,因为'assign'被广泛认为是非常糟糕的做法。相信我,你会在路上感到遗憾。 – joran

+0

我从不使用'assign'自己。来自@joran的命名列表可能是更好的方法。 – anotherFishGuy

2

R中做到这一点的方法是保持对事物的命名列表:

dat_list <- replicate(3,data.frame(sub=character(),street=character()),simplify = FALSE) 
dat_list <- setNames(dat_list,c('A','B','C')) 

我以前c('A','B','C')而不是State$City只是为了让我的回答自己的代码包含和运行的。

+0

谢谢您的回答我想使用它,但我遇到了问题。当我尝试你的方法时,我把'dat_list'作为'3'的列表。如果我想让每个列表成为data.frame,那么我必须执行'A < - as.data.frame(dat_list $ A)。 – Dre

+0

@Dre其实,没有。结果是三个数据帧的列表,这是整个点。对象'dat_list $ A'已经是一个数据框。 (我们将忽略数据框本身就是一个特定类型的列表的技术细节。) – joran

相关问题