如何解决:“没有适用于'pull'的方法”(dplyr)

时间:2019-07-11 08:45:58

标签: r dataframe dplyr

我列出了1984-1986年的几个NUTS2代码。我试图获得这3年中每个NUTS2地区的平均GDP。 下面是我尝试通过以下方法实现的代码-不幸的是,我总是在最后一行检索到一个错误,说“ pull”不适用于该类。

初始数据集如下:

NUTS_CODE NUTS_LEVEL SCENARIO_ID REF_YEAR IND_VALUE NUTS_C
837      BE10          2           1     1984 2.307e+10     BE
838      BE21          2           1     1984 2.195e+10     BE
839      BE22          2           1     1984 6.330e+09     BE
840      BE23          2           1     1984 1.340e+10     BE
841      BE24          2           1     1984 9.430e+09     BE
842      BE25          2           1     1984 1.093e+10     BE

我的代码:

regions <- unique(as.character(gdp_nuts2_member_1984to1986$NUTS_CODE))
data84_86 <- regions
data84_86 <-cbind(data84_86, rep(as.numeric(NA), length(regions)))

colnames(data84_86) <- c("regions","values")


for(i in 1:nrow(data84_86))
{
  data84_86[i,2]<-mean(pull((gdp_nuts2_member_1984to1986%>%filter(NUTS_CODE == regions[i]))[,"IND_VALUE"]))
}
  

UseMethod(“ pull”)中的错误:没有适用于'pull'的方法   应用于类“ c('double','numeric')”的对象

1 个答案:

答案 0 :(得分:0)

pull函数的工作原理略有不同:

library(dplyr)
 data84_86[i,2] <- mean(pull(gdp_nuts2_member_1984to1986 %>%
             filter(NUTS_CODE == regions[i]), IND_VALUE))

如果您这样编写代码,您的代码将变得更加可读:

data84_86[i,2] <- gdp_nuts2_member_1984to1986 %>%
                 filter(NUTS_CODE == regions[i]) %>%
                 pull(IND_VALUE) %>%
                 mean()

此外,可以像这样获得相同的结果

gdp_nuts2_member_1984to1986 %>%
  group_by(NUTS_CODE) %>%
  summarise(values = mean(IND_VALUE))

这种方式更易于阅读,计算效率更高。