我有以下数据集:
a<-data_frame(school= c(2,2,2,2,2,3,3,3,3,3,3,3),
year=c(2011,2011,2011,2012,2012,2011,2011,2011,2012,2012,2012,2012),
numberofstudents=c(3,3,3,2,2,3,3,3,2,NA,2,4))
首先,我想将所有NA值更改为该组的该变量的平均值。因此,NA应该不是2.43。
第二,我想计算第四个变量,即学校的滞后价值与学生人数的比率。
data <-
a %>%
group_by(school) %>%
summarize(lag.value.ratio = lag(school, 1)/numberofstudents) %>% ungroup
不幸的是,我遇到以下错误:错误:列lag.value.ratio
的长度必须为1(汇总值),而不是5。
如何避免此错误并获取平均组值而不是NA?
答案 0 :(得分:0)
如果您希望组的平均值代替NA,则我将2.83计算为学校3的平均值。由于使用了汇总,因此会出现错误,因为它希望将结果折叠为n的数量。您拥有的组(在本例中为2)。我相信你想要的是一个变异。
编辑:我正在加载下面使用的库,并确保使用的lag
函数来自dplyr
包。
library(dplyr)
library(tidyr)
a<-data_frame(school= c(2,2,2,2,2,3,3,3,3,3,3,3),
year=c(2011,2011,2011,2012,2012,2011,2011,2011,2012,2012,2012,2012),
numberofstudents=c(3,3,3,2,2,3,3,3,2,NA,2,4))
a %>%
group_by(school) %>%
mutate(numberofstudents = replace_na(numberofstudents, mean(numberofstudents, na.rm = TRUE)),
lag.value.ratio = dplyr::lag(school, 1)/numberofstudents) %>%
ungroup()
给予
# A tibble: 12 x 4
school year numberofstudents lag.value.ratio
<dbl> <dbl> <dbl> <dbl>
1 2 2011 3 NA
2 2 2011 3 0.667
3 2 2011 3 0.667
4 2 2012 2 1
5 2 2012 2 1
6 3 2011 3 NA
7 3 2011 3 1
8 3 2011 3 1
9 3 2012 2 1.5
10 3 2012 2.83 1.06
11 3 2012 2 1.5
12 3 2012 4 0.75