我正在通过dplyr实现滚动和计算,但是在我的数据库中,我有许多变量只有一个或只有几个观察值,导致(k小于n)错误.我试图在这个带有过滤器和合并的例子中解决这个问题,但是想知道是否有办法在dplyr中更优雅和自动地做到这一点.请看下面的例子
#create data
dg = expand.grid(site = c("Boston","New York"),
year = 2000:2004)
dg$animal="dog"
dg$animal[10]="cat";dg$animal=as.factor(dg$animal)
dg$count = rpois(dim(dg)[1], 5)
Run Code Online (Sandbox Code Playgroud)
如果我将运行下面的代码,因为我只有一行"cat",一个得到(错误:k <= n不是真的)错误
#running average
dg2 = dg %>%
arrange(site,year,animal) %>%
group_by(site,animal) %>%
# filter(animal=="dog") %>%
mutate(roll_sum = rollsum(x = count, 2, align = "right", fill = NA))
Run Code Online (Sandbox Code Playgroud)
我试图通过使用以下代码解决这个问题,该代码过滤掉"cat"值并进行后续合并,但我想知道是否可以直接在dplyr中执行此操作,尤其是在此解决方案中,必须指定/事先知道每个变量的唯一行数,如果改变滚动总和的范围等,则手动调整.
dg2 = dg %>%
arrange(site,year,animal) %>%
group_by(site,animal) %>%
filter(animal=="dog") %>%
mutate(roll_sum = rollsum(x = count, 2, align = "right", fill = NA))
merge(dg,dg2,c("site", "year","animal","count"),all.x=TRUE)
site year animal count roll_sum
1 Boston 2000 dog …Run Code Online (Sandbox Code Playgroud)