【问题标题】:Difference between dplyr and data.table resultsdplyr 和 data.table 结果之间的区别
【发布时间】:2014-08-08 12:50:01
【问题描述】:

我想知道我在使用 data.table 或 dplyr 时做错了什么。

以下代码 sn-p 的目标是按部门和年份计算 ROA 与 ROA 中值的差异。两者看起来应该产生可比较的结果,但没有。

require(data.table)
require(dplyr)

set.seed(1)
roa <- rnorm(100000, mean = 0, sd = 1)
sector <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
year <- c(2012, 2011, 2010, 2009, 2008, 2007)
sector <- sample(sector, 100000, replace = T)
year <- sample(year, 100000, replace = T)
data <- data.table(roa, sector, year)
rm(roa, sector, year)

data[,roa_ad_chk:= roa - median(roa, na.rm=T), by = c("sector", "year")]
data <- data %>% 
  group_by(sector, year) %>%
  mutate(roa_ad = roa - median(roa, na.rm = T))

#shouldn't these functions be equivalent?
sum(data$roa_ad_chk - data$roa_ad)
rm(data)

【问题讨论】:

  • 当我运行它时,最终总和为 0 - 所以它们似乎是等价的。你得到什么?你运行什么版本的dplyrdata.table
  • 我得到了 66.81926。虽然我刚刚重新启动 R 并得到 0 的答案。看起来这与加载 dplyr 和 plyr 有关。

标签: r data.table dplyr


【解决方案1】:

在这种情况下,您不一定需要分离其中一个包。您可以同时加载这两个包,但是当调用它们之间具有共享名称的函数时,您可以使用范围运算符来区分您正在调用哪个包。例如,假设您想从 plyr 包中调用函数“summarise()”。你叫它:

plyr::summarise()

如果您想从 dplyr 包中调用该函数,请调用:

dplyr::summarise()

【讨论】:

    【解决方案2】:

    问题是由于同时加载了 dplyr 和 plyr 造成的。

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 2023-04-05
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多