【问题标题】:Aggregate in R keeping only a single value在 R 中聚合只保留一个值
【发布时间】: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


【解决方案1】:

试试这个:

data[ ! is.na(data$week), ]

使用 data.table 的类似答案要简单一些:

data[ ! is.na(week) ] 

【讨论】:

  • 继续输出它看起来好像这些不起作用,但分配得到了想要的结果!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多