【发布时间】:2014-10-29 17:36:09
【问题描述】:
我有一个我想聚合的数据框,删除我想用来聚合的列中非 NA 的行(或选择唯一的行)
即在下面,我可能想要删除数据框中的每一行,其中一周有 NA,并保持其他未修改:
OTHER_REV month quarter year week date days daysinmonth
1 2785013 1 2009 Q1 2009 2009-01-05 2009-01-05 2009-01-05 31
2 2785013 1 2009 Q1 2009 2009-01-12 2009-01-05 2009-01-05 31
3 2785013 1 2009 Q1 2009 2009-01-19 2009-01-05 2009-01-05 31
4 2785013 1 2009 Q1 2009 2009-01-26 2009-01-05 2009-01-05 31
5 2785013 1 NA QNA 2009 <NA> 2009-01-16 2009-01-16 31
6 2785013 1 NA QNA 2009 <NA> 2009-01-17 2009-01-17 31
制作:
OTHER_REV month quarter year week date days daysinmonth
1 2785013 1 2009 Q1 2009 2009-01-05 2009-01-05 2009-01-05 31
2 2785013 1 2009 Q1 2009 2009-01-12 2009-01-05 2009-01-05 31
3 2785013 1 2009 Q1 2009 2009-01-19 2009-01-05 2009-01-05 31
4 2785013 1 2009 Q1 2009 2009-01-26 2009-01-05 2009-01-05 31
我尝试使用 grep 和 unique(data$stuff) 的组合,并使用聚合,但这些方法似乎都不起作用。
以下是str的数据:
'data.frame': 1896 obs. of 34 variables:
$ OTHER_REV : num 2785013 2785013 2785013 2785013 2785013 ...
$ month : num 1 1 1 1 1 1 1 1 1 1 ...
$ quarter :Class 'yearqtr' num [1:1896] 2009 2009 2009 2009 NA ...
$ year : num 2009 2009 2009 2009 2009 ...
$ week : Date, format: "2009-01-05" "2009-01-12" "2009-01-19" "2009-01-26" ...
$ date : Date, format: "2009-01-05" "2009-01-05" "2009-01-05" "2009-01-05" ...
$ days : Date, format: "2009-01-05" "2009-01-05" "2009-01-05" "2009-01-05" ...
$ daysinmonth : int 31 31 31 31 31 31 31 31 31 31 ...
在 df$week 上调用 unique 会产生:
[1] "2009-01-05" "2009-01-12" "2009-01-19" "2009-01-26" NA "2009-02-02"......
【问题讨论】:
-
试试
df[!is.na(df$week),] -
如果你想删除所有带有
NA的行,那么na.omit(df)。如果您只想在星期列中省略带有NA的行,那么正如 akrun 所说。 -
不是您问题的答案,但
?complete.cases也是一个很好知道的功能 -
@user1987097 akrun 的答案绝对适用于您提供的数据。你能告诉我们更多关于出了什么问题的细节吗?有任何错误消息吗?
-
我怀疑您的
NA不是真实的NA(正如 R 定义的那样),而是它们是字符或因素,因此 @akrun 解决方案不起作用。请提供str(df)。或者试试df[!grepl("NA", df$week),]看看会发生什么
标签: r