2014-06-13 84 views
0

我是R新手,并在两周前开始学习。我想列出不同年份的热带气旋数据(有些年份不存在,因为没有热带气旋),并且列出了1907 - 2013年每年一列的列表和一列热带气旋数量。 在这个例子中,我包含了1973年发生的事件列表(1912年以前没有)。组合不同长度的列表

Year Count 

1 1912 1 
2 1913 1 
3 1921 1 
4 1940 1 
5 1953 1 
6 1958 1 
7 1959 1 
8 1960 1 
9 1966 1 
10 1969 1 
11 1971 1 
12 1973 2 

我试过使用for循环和if/else语句,但它不起作用。我得到消息“更长的对象长度不是更短的对象长度的倍数”和“条件长度> 1,只有第一个元素将被使用。”

tc.SP=matrix(0,len.tc.yr,2) 
tc.SP[,1]=tc.year.list 

for (i in 1:len.tc.yr) #107 yrs (1907-2013) 
{ 
    if (tc.SP5.count[,1] == tc.SP[,1]) #tc.SP5.count is various years of TC occ. 
    {tc.SP[,2]= tc.SP5.count[,2]} 
    else 
    {tc.SP[,2]= 0} 
} 

感谢您提前提供任何帮助。

回答

2

当你说列表时,我会假设你想创建一个data.frame。假设上述数据位于一个名为cyclone的数据框中。每年创建data.frame的最简单方法就是将其与完整列表合并。例如,

cyclone.full <- merge(cyclone, data.frame(Year=1907:2013), all=T) 

这里data.frames会自动合并在Year列上,因为两个集合都有该列。这将在所有缺失的年份中纳入NA值。如果你想默认为0,你可以做

cyclone.full$Count[is.na(cyclone.full$Count)] <- 0 

然后哟uget

head(cyclone.full) 

# Year Count 
# 1 1907  0 
# 2 1908  0 
# 3 1909  0 
# 4 1910  0 
# 5 1911  0 
# 6 1912  1 
+0

是的,这个回答我的问题。谢谢你的好解释! – Angelique