使用for循环在R中创建对象

时间:2016-03-23 21:56:15

标签: r for-loop

(我已经尝试过搜索这个,如果我错过了某个地方并且之前已经得到了答复,那么道歉:)

我有一个包含以下变量的数据框:
    data< - data.frame(country,year,fdi,id)

**country  /  year  /  fdi  /  id**   
Germany  /  1991  /  1.1  /  1  
Germany  /  1992  /  1.4  /  1   
Germany  /  1993  /  1.3  /  1  
Spain    /  1991  /  1.2  /  2  
Spain    /  1992  /  2.3  /  2  
Spain    /  1993  /  2.4  /  2  
Greece   /  1991  /  1.4  /  3  
Greece   /  1992  /  1.7  /  3  
Greece   /  1993  /  1.8  /  3  

我需要做的是为每个国家/地区创建对象,以存储所有观察年份的特定国家/地区的fdi值。

例如:

fdigdp.germany = data$fdi [data$country=="Germany"]
fdigdp.germany = as.ts(fdi.germany)

...给我一个对象,它是一个值为1.1,1.4,1.3的向量。

是否有一种很好的方法可以通过for循环自动执行此操作,以便每个国家/地区使用fdi值获取一个对象。如果对象从他们所代表的国家派生出他们的名字,那将是一个加分,但即使只是一个索引号(例如" id"变量)也可以。

1 个答案:

答案 0 :(得分:0)

您可以在框架上聚合并为每个组生成一行,使用c函数将值组合到矢量中;

#    country year fdi id
# 1  Germany 1991 1.1  1
# 2  Germany 1992 1.4  1
# 3  Germany 1993 1.3  1
# 4    Spain 1991 1.2  2
# 5    Spain 1992 2.3  2
# 6    Spain 1993 2.4  2
# 7   Greece 1991 1.4  3
# 8   Greece 1992 1.7  3
# 9   Greece 1993 1.8  3
# 10  Greece 1994 1.9  3

df2 <- setNames(aggregate(df$fdi, list(df$country), FUN=c), c('country','fdi_vector'))

#   country         fdi_vector
# 1 Germany      1.1, 1.4, 1.3
# 2  Greece 1.4, 1.7, 1.8, 1.9
# 3   Spain      1.2, 2.3, 2.4