首页 > 解决方案 > R在具有动物园滞后功能的ddply循环中第一次而不是第二次找到我的对象-无法弄清楚如何修改代码

问题描述

我编写的函数有问题,zoo并将其应用到数据集,使用ddply. 我已经尝试了所有其他 *apply 函数,并且不得不重命名我的字符串变量元素,但我仍然遇到错误。我想我已经弄清楚这篇文章的错误是什么,但我无法理解纠正代码的方法。在解释之前,我将把数据集和我的代码放在下面。

Name <- c("Aberavon", "Aberavon", "Aberavon", "AberdeenNorth", 
"AberdeenNorth", "AberdeenNorth")
year <- c(1964, 1966, 1970, 1964, 1966, 1970)
winner <- c("LAB", "LAB", "LIB", "CON", "CON", "CON")
dat <- data.frame(Name, year, winner)


tag_party_change <- function(x){
  x = x[order(x$year),]
  plab = zoo(x$top1_label) #this top1_label is a previous function to find 
#winner and return the labels (CON, LAB, LIB etc.)
  plab_lag = stats::lag(plab, -1, na.pad = T)
  x$pdelta = ifelse(plab == plab_lag, 0, 1)
  return(x)
}

dat_final = ddply(dat, as.quoted(dat$Name), tag_party_change)

所以我在这里要做的是让 R 查看Name元素,它的前一个year,看看是否有变化,如果新向量中winner有变化返回,则没有变化。所以新的向量值应该在示例中。但我收到了这个错误:10NA, 0, 1, NA, 0, 0

Error in FUN(X[[i]], ...) : object 'Aberavon' not found

现在从我从以前的帖子中可以得出的结论(我已经使用了很多来达到这一步!),这意味着 R 已经找到Aberavon了第一次,然后回去寻找它并且它不存在 - 也许是因为它第一次将其存储在本地环境中,然后第二次就消失了。也许我需要在Name某个地方将变量放入函数中,这样就不会有这个存储问题,因为它会在数据集/全局环境中寻找它的永久位置?或者也许我离题了,这是另一个问题?

这段代码有很多错误,我不得不修复其他 *apply 函数试图让它工作的问题,但这是我返回的最简单的错误。真的希望有知识的人可以提供帮助,这样我就可以继续这项工作!谢谢你。

PS 在使用 SPSS 很长时间后,我对 R 还很陌生,所以我希望示例代码可以正常工作。

标签: rerror-handlingplyrzoo

解决方案


推荐阅读