r - 使用汇总会改变我的计算结果
问题描述
我有以下代码,我不通过管道summarise
library(tidyverse)
library(nycflights13)
depArrDelay <- flights %>%
filter_at(vars(c("dep_delay", "arr_delay", "distance")), all_vars(!is.na(.))) %>%
group_by(dep_delay, arr_delay)
现在做
cor(depArrDelay$dep_delay, depArrDelay$arr_delay)
产量0.9148028
,这是我计算的正确值
现在我添加%>% summarise (...)
如下所示
depArrDelay <- flights %>%
filter_at(vars(c("dep_delay", "arr_delay", "distance")), all_vars(!is.na(.))) %>%
group_by(dep_delay, arr_delay) %>% summarise(count=n())
现在做:cor(depArrDelay$dep_delay, depArrDelay$arr_delay)
产量0.9260394
所以现在cov被改变了。为什么会这样?据我所知,summarise
应该只通过所有其他未提及的列,而不是改变价值。我错过了什么,我怎样才能避免summarise
改变cov
?
解决方案
正如评论中已经提到的,summarise
减少了行数。如果您需要计数而不更改行数,您可以使用add_count
.
library(nycflights13)
library(dplyr)
temp <- flights %>%
filter_at(vars(c(dep_delay, arr_delay, distance)), all_vars(!is.na(.))) %>%
add_count(dep_delay, arr_delay)
如果您随后检查相关性,您将获得与之前相同的值。
cor(temp$dep_delay, temp$arr_delay)
#[1] 0.9148027589
如果有更多的列并且您只需要有限的列进行分析,您可以使用 选择相关列select
。
推荐阅读
- python - 如何更改散点图的颜色
- javascript - 可以在物化选择多个输入中实现“全选”选项吗?
- c++ - 类枚举派生类
- python - 根据 if 语句将列从 excel 文件附加到 csv 文件
- python - 插入名称时的 Psycopg2 错误包含 'into PostgreSQL
- java - 如何在 Java 中创建对象集合 Spark Dataset?
- html - 如何在 *ngFor 中显示索引数据?
- python - 如何使用python按文件类型绘制折线图?
- c - 有没有办法验证我的程序没有内存泄漏?
- foreach - 如何使用逻辑应用在 foreach 循环中创建具有 api 响应的命名 blob