【发布时间】:2016-06-15 21:48:47
【问题描述】:
我正在尝试清理我的数据。标准之一是我需要一个不间断的变量“资产”序列,但我有一些 NA。但是,我不能简单地删除 NA 观察,而是需要删除 NA 事件之后的所有后续观察。
这里是一个例子:
productreference<-c(1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5)
Year<-c(2000,2001,2002,2003,1999,2000,2001,2005,2006,2007,2008,1998,1999,2000,2000,2001,2002,2003)
assets<-c(2,3,NA,2,34,NA,45,1,23,34,56,56,67,23,23,NA,14,NA)
mydf<-data.frame(productreference,Year,assets)
mydf
# productreference Year assets
# 1 1 2000 2
# 2 1 2001 3
# 3 1 2002 NA
# 4 1 2003 2
# 5 2 1999 34
# 6 2 2000 NA
# 7 2 2001 45
# 8 3 2005 1
# 9 3 2006 23
# 10 3 2007 34
# 11 3 2008 56
# 12 4 1998 56
# 13 4 1999 67
# 14 4 2000 23
# 15 5 2000 23
# 16 5 2001 NA
# 17 5 2002 14
# 18 5 2003 NA
我已经看到有一种方法可以使用 plyr 按组执行功能,并且我还能够创建一个包含 0-1 的列,其中 0 表示资产具有有效条目,1 突出显示缺失的值不。
mydf$missing<-ifelse(mydf$assets>=0,0,1)
mydf[c("missing")][is.na(mydf[c("missing")])] <- 1
我有一个非常大的数据集,因此无法手动删除行,非常感谢您的帮助!
【问题讨论】:
-
您希望使用
productreference作为分组变量来完成这项工作吗? -
这里猜到一半了
mydf[!is.na(ave(assets, productreference, FUN = cumsum)), ] -
既然我们有
dplyr和data.table的答案,我会在 rawr 的评论中添加注释,说明这就是你在 base 中的做法。 -
是的,我的意思是产品参考,而不是你。我只是尝试了这样做的“基本方式”,但我收到一个名为“交互错误(...):找不到对象'productreference'”的错误。有什么想法可能出了什么问题?
标签: r