首页 > 解决方案 > 使用汇总会改变我的计算结果

问题描述

我有以下代码,我不通过管道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

标签: r

解决方案


正如评论中已经提到的,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


推荐阅读