合并不同长度的列表

时间:2014-06-13 17:08:29

标签: r

我是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}
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

当你说列表时,我假设您要创建一个data.frame。我们假设上面的数据位于名为cyclone的data.frame中。每年创建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