r - 为什么这里会出现 NA/NaN 错误,我该怎么办?
问题描述
我的数据如下所示:
library(tidyverse)
df <- tibble(
Type = c(rep("A", 2), rep("B", 2), rep("A", 2), rep("B", 2)),
Source = c(rep("X", 4), rep("Y", 4)),
ID = c(1001:1008),
January = c(11, 22, 10, 30, NA, NA, NA, NA),
February = c(10, 42, 15, 27, NA, NA, NA, NA)
)
(实际上,多年来有更多的列,其中一些在 Y 行中是非 NA 的。但这对我的问题来说是可行的。)
我想进行操纵...
newDF <- df %>%
group_by(Type, Source) %>%
summarize(theTotal = sum(January:February, na.rm = TRUE))
...但我得到了错误Error in January:February : NA/NaN argument
。我知道为什么会出现此错误:1 月和 2 月在某些行中是 NA。即使二月在这些行中有数字,只要一月仍然是 NA,我也会收到此错误。
我的问题是:1)为什么na.rm = TRUE
不足以防止这种情况发生?2)如果有的话,我可以对我的代码做些什么来确保我为 A/B 和 Y 的这些组合得到 0?
解决方案
在这种情况下,我们可能可以使用summarise_at
,然后使用sum
. 在grouping_by
感兴趣的列之后,我们得到了。sum
列“一月”到“二月”作为单行。与summarise_at
然后再ungroup
得到sum
library(dplyr)
df %>%
group_by(Type, Source) %>%
summarise_at(vars(January:February), sum, na.rm = TRUE) %>%
ungroup %>%
transmute(Type, Source,
theTotal = rowSums(select(.,January:February), na.rm = TRUE))
# A tibble: 4 x 3
# Type Source theTotal
# <chr> <chr> <dbl>
#1 A X 85
#2 A Y 0
#3 B X 82
#4 B Y 0
或者另一种选择是
library(purrr)
df %>%
group_split(Type, Source) %>%
map_dfr(~ .x %>%
summarise(Type = first(Type), Source = first(Source),
theTotal = select(., January:February) %>% unlist %>% sum(., na.rm = TRUE)))
# A tibble: 4 x 3
# Type Source theTotal
# <chr> <chr> <dbl>
#1 A X 85
#2 A Y 0
#3 B X 82
#4 B Y 0
推荐阅读
- c++ - Socket.io Client C++, get array from socket.on
- python - 使用 feed_dict 在 retrain.py 中进行预测的全局名称错误
- c# - 从 XAML 中按键访问字典值
- mysql - 当 MySQL 优化器选择不使用小型连接表上的键时如何避免全表扫描
- user-controls - 清除用户控件内的所有文本框
- angularjs - 带有表达式的AngularJS ng-max(带有错误的DEMO)
- android - React-Native Android 应用程序在 runtme 崩溃
- java - 在 Firebase 中同时写入和读取数据
- akka - 在 Flink 中使用 Actor 系统
- php - laravel 5.6 护照第一个命令