R zoo:在'中缺少值;行名称';不允许
我不确定当我使用与zoo对象匹配时,为什么索引中会出现R zoo:在'中缺少值;行名称';不允许,r,zoo,R,Zoo,我不确定当我使用与zoo对象匹配时,为什么索引中会出现。假设我有以下几点: a <- read.zoo(data.frame(date=as.Date('2011-12-31') + 0:49, col1=seq(1,50), col2=seq(11,60)), FUN = as.Date) mon <- read.zoo(data.frame(date=c(as.Date('2012-01-01'), as.Date('2012-02-01'), as.Date('2012-03-
。假设我有以下几点:
a <- read.zoo(data.frame(date=as.Date('2011-12-31') + 0:49, col1=seq(1,50), col2=seq(11,60)), FUN = as.Date)
mon <- read.zoo(data.frame(date=c(as.Date('2012-01-01'), as.Date('2012-02-01'), as.Date('2012-03-01')), mc=letters[1:3], mc2=LETTERS[1:3]), FUN = as.Date)
进一步查看mon
我不确定额外的
行来自哪里:
mon
mc mc2 matched
2012-01-01 a A 2
2012-02-01 b B 33
2012-03-01 c C <NA>
<NA> <NA> <NA> <NA>
mon
mc-mc2匹配
2012-01-01 a 2
2012-02-01乙33
2012-03-01 c
比赛的正确方式是什么?结果是正确的,但最后一行的所有值都是
。我一定是做错了什么…如果你看一下a
对象,你会发现日期结束于
> a
col1 col2
2011-12-31 1 11
2012-01-01 2 12
<snipped most of them>
2012-02-16 48 58
2012-02-17 49 59
2012-02-18 50 60
这就是所有NA的行的创建原因
a[MATCH(index(mon),index(a)) ]
#--------
col1 col2
2012-01-01 2 12
2012-02-01 33 43
<NA> NA NA
[似乎您正在尝试创建一个左联接。对于该联接,通常使用合并
。下面代码中显示的参数all=c(TRUE,FALSE)
的两个元素分别指的是我们是否在mon
和a
中保留不匹配的日期。
图书馆(动物园)
如果不需要带有NA的行,则指定FALSE以消除mon
和a
中不匹配的日期:
merge(mon, a, all = FALSE)
按时间索引
这也可以通过使用这样的时间索引来实现
result <- mon
result$col1 <- a$col1[time(mon)] # does an implicit merge
result
给予:
mc mc2 col1 col2
2012-01-01 a A 2 12
2012-02-01 b B 33 43
2012-03-01 c C <NA> <NA>
mc mc2 col1
2012-01-01 a A 2
2012-02-01 b B 33
2012-03-01 c C <NA>
col1 col2
2012-01-01 2 12
2012-02-01 33 43
mc mc2 col1
2012-01-01 a A 2
2012-02-01 b B 33
2012-03-01 c C <NA>
匹配
1)尽管建议使用上述方法而不是MATCH
,但如果出于某种原因想使用MATCH
,请添加nomatch=0
参数,使其返回0,而不是NA(非匹配)。这将导致索引简单地删除该值。分配给result$col1
将执行隐式合并
填充NA
result <- mon
result$col1 <- a$col1[MATCH(time(mon), time(a), nomatch = 0)]
result
其他
请注意,问题中所指的row.names是时间索引,而不是行名称。因此基本上是左键将a连接到mon?如果它们是xts对象,merge.xts(mon,a,join=“left”)
。不确定你为什么会得到na。也许@G.Grothendieck会顺便问一下这个问题,他可能知道你为什么会得到na。在a[匹配(索引(mon),索引(a)]中最后一次关闭参数后,缺少逗号$col1
并且a中的最后一个日期不匹配
,因此NA@42-逗号没有改变任何东西。与最后一个日期不匹配是可以的。我特别想弄清楚为什么最后一行的索引和所有数据都是NA。回答得好!谢谢你像往常一样解释得很好。谢谢。
mc mc2 col1 col2
2012-01-01 a A 2 12
2012-02-01 b B 33 43
2012-03-01 c C <NA> <NA>
merge(mon, a, all = c(TRUE, FALSE))$col1
merge(mon, a, all = FALSE)
result <- mon
result$col1 <- a$col1[time(mon)] # does an implicit merge
result
mc mc2 col1
2012-01-01 a A 2
2012-02-01 b B 33
2012-03-01 c C <NA>
a[time(mon)]
col1 col2
2012-01-01 2 12
2012-02-01 33 43
result <- mon
result$col1 <- a$col1[MATCH(time(mon), time(a), nomatch = 0)]
result
mc mc2 col1
2012-01-01 a A 2
2012-02-01 b B 33
2012-03-01 c C <NA>
result <- mon
result$col1 <- coredata(a$col1)[MATCH(time(mon), time(a))]
result