gpt4 book ai didi

r - 动物园:不允许在 'row.names' 中缺少值

转载 作者:行者123 更新时间:2023-12-04 12:31:23 26 4
gpt4 key购买 nike

我不确定为什么会收到 <NA>当我将 MATCH 与动物园对象一起使用时在索引中。假设我有以下内容:

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$matched <- a[MATCH(index(mon),index(a))]$col1

然后我试着查看什么mon现在看起来像并得到一个错误:

View(mon)
Error in View : missing values in 'row.names' are not allowed

查看mon此外,我不确定额外的 <NA> 在哪里行来自:

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>

进行此匹配的正确方法是什么?结果是正确的,除了最后一行,其中所有值都是 <NA> .我一定是在这里做一些根本性的错误......

最佳答案

您似乎正在尝试创建左连接。对于那个通常使用 merge。以下代码中显示的参数 all = c(TRUE, FALSE) 的两个元素指的是我们是否在 mona 中保留不匹配的日期> 分别。
图书馆(动物园)

a <- zoo(cbind(col1 = 1:50, col2 = 11:60), as.Date("2011-12-31") + 0:49)
mon <- zoo(cbind(mc = letters[1:3], mc2 = LETTERS[1:3]),
as.Date(c('2012-01-01', '2012-02-01', '2012-03-01')))

merge(mon, a, all = c(TRUE, FALSE))

给予:

           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>

如果你只想要 col1 那么:

merge(mon, a, all = c(TRUE, FALSE))$col1

如果您不需要带有 NA 的行,则指定 FALSE 以消除 mona 中不匹配的日期:

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>

如果您不需要 NA 行,那么这就足够了:

a[time(mon)]

给予:

           col1 col2
2012-01-01 2 12
2012-02-01 33 43

匹配

1) 尽管上述方法优于 MATCH 如果您出于某种原因确实想使用 MATCH 然后添加 nomatch = 0 参数,以便它返回 0 而不是不匹配的 NA。这将导致索引简单地删除该值。对 result$col1 的赋值将执行隐式 merge 填充 NA。

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$dol1 可用于仅获取 col1

2) 另一种方法是执行此操作,结果相同。在这种情况下,右侧有三个元素,第三个元素是 NA,但由于右侧现在是一个普通向量,它只是被一个元素一个元素地复制到 result$col1 中,而不是进行隐式合并。

result <- mon
result$col1 <- coredata(a$col1)[MATCH(time(mon), time(a))]
result

其他

请注意,问题中称为 row.names 的是时间索引,而不是行名称。

关于r - 动物园:不允许在 'row.names' 中缺少值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55168501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com