dplyr和data.table结果之间的区别

时间:2014-08-08 12:50:01

标签: r data.table dplyr

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

以下代码段的目标是按行业和年份计算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)

2 个答案:

答案 0 :(得分:1)

问题是dplyr和plyr都加载了。

答案 1 :(得分:1)

在这种情况下,您不一定需要拆除其中一个包。您可以加载两个包,但是当调用它们之间具有共享名称的函数时,您可以使用范围运算符来区分您正在调用的函数。例如,假设您要调用函数&#39; summarize()&#39;来自plyr包。你叫它:

plyr::summarise()

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

dplyr::summarise()