Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 我该如何避免“不”字;“;动物园”;如果‘;订单由’;不是唯一的吗;?_R_Zoo - Fatal编程技术网

R 我该如何避免“不”字;“;动物园”;如果‘;订单由’;不是唯一的吗;?

R 我该如何避免“不”字;“;动物园”;如果‘;订单由’;不是唯一的吗;?,r,zoo,R,Zoo,我正在试图找到一种方法,在不点击警告的情况下将列附加到我的zoo对象: zoo中的警告(rval,索引(x)[i]):“zoo”对象的一些方法 如果“order.by”中的索引项不唯一,则不工作 假设我有以下代码: 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(

我正在试图找到一种方法,在不点击警告的情况下将列附加到我的zoo对象:

zoo中的警告(rval,索引(x)[i]):“zoo”对象的一些方法 如果“order.by”中的索引项不唯一,则不工作

假设我有以下代码:

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)

什么是正确的方法,这样我就不会收到警告?

如果我理解正确,您需要
a
索引的第一个月的日期的数值,除非该年/月没有出现在
mon
索引中,在这种情况下,您需要NA

mon.ym <- as.yearmon(index(mon))
a$month <- as.numeric(as.Date(mon.ym))[ match(as.yearmon(index(a)), mon.ym) ]

首先,不要使用匹配。这已在先前的答复中提到。第二,如果你想把
a
减少到年/月,那么就使用
aggregate.zoo
,例如
aggregate(a,as.yearmon,mean)
@g.Grothendieck我知道你不鼓励使用
MATCH
,但我想不出其他方法。我不认为我可以在这种情况下使用聚合,因为我没有聚合。我不想把它简化为yearmon,这只是我试图对数据执行的一个操作的示例。我需要将
mon
表中匹配列的值附加到
a
表中,是的,它在a表中不是唯一的。问题不在于“只取
a
中日期字段的yearmon并将其填入
month
列”。我展示的只是一个更大项目的简单示例。期望的结果是什么?上面的代码给出了正确的结果。唯一的问题是警告。有没有办法在没有得到警告的情况下得到相同的结果?在这种情况下,我收回关于match的评论。见答案。
mon.ym <- as.yearmon(index(mon))
a$month <- as.numeric(as.Date(mon.ym))[ match(as.yearmon(index(a)), mon.ym) ]
a.ym <- as.yearmon(index(a))
a$month <- ifelse(a.ym %in% as.yearmon(index(mon)), as.Date(a.ym), NA)