【问题标题】:Removing NA in dplyr pipe [duplicate]删除 dplyr 管道中的 NA [重复]
【发布时间】:2014-12-27 05:18:55
【问题描述】:

我尝试使用 dplyr 管道从子集中删除 NA。我的回答是否表明错过了一步。我正在尝试学习如何使用 dplyr 编写函数:

> outcome.df%>%
+ group_by(Hospital,State)%>%
+ arrange(desc(HeartAttackDeath,na.rm=TRUE))%>%
+ head()
Source: local data frame [6 x 5]
Groups: Hospital, State
医院状态心脏病发作死亡 1 ABBEVILLE 地区医疗中心 SC NA 2 阿比维尔综合医院 LA NA 3 明尼苏达州雅培西北医院 12.3 4 阿比林地区医疗中心 TX 17.2 5 阿宾顿纪念医院 PA 14.3 6 亚伯拉罕·林肯纪念医院 IL NA 未显示的变量:HeartFailureDeath (dbl)、PneumoniaDeath (dbl)

【问题讨论】:

标签: r dplyr na


【解决方案1】:

我不认为desc 接受na.rm 参数...我真的很惊讶它没有抛出错误,当你给它一个。如果您只想删除NAs,请使用na.omit(基础)或tidyr::drop_na

outcome.df %>%
  na.omit() %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

library(tidyr)
outcome.df %>%
  drop_na() %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

如果您只想从 HeartAttackDeath 列中删除 NAs,请使用 is.na 过滤,或使用 tidyr::drop_na

outcome.df %>%
  filter(!is.na(HeartAttackDeath)) %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

outcome.df %>%
  drop_na(HeartAttackDeath) %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

正如骗子所指出的,complete.cases 也可以使用,但是放入链中有点棘手,因为它需要一个数据帧作为参数但返回一个索引向量。所以你可以这样使用它:

outcome.df %>%
  filter(complete.cases(.)) %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

【讨论】:

  • 非常感谢。我对所有列都使用了 na.omit 并且它有效。结果.df 是大型数据集的子集。我正在尝试按从最好到最差的顺序排列条件。
  • 当我以这种方式使用 na.omit 时,它会抛出 Error in na.omit.default() argument "object" is missing, with no default 即使我喂它 hflights。在管道的第二阶段与 !is.na(hflights) 的行为相同...@ITCoderWhiz
  • @D8Amonk 听起来您正在进行一些功能屏蔽。从一个新的 R 会话library(dplyr); library(hflights); x = hflights %>% na.omit() 工作得很好。也许你已经加载了一个有它自己的na.omit 函数的包?
猜你喜欢
  • 2020-09-16
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多