首页 > 解决方案 > 通过 dplyr 在行上应用自己的函数

问题描述

我是 R 的新手,我一直在寻找解决方案,需要你的帮助:)。

我正在尝试应用代码,该代码将在某些条件下从同一个表中创建具有汇总值的新列。

library(tidyverse)
set.seed(1)
a<-data.frame(weeks=1:52, index=sample(1:3,52,replace=TRUE),factory=sample(c('A','B'),52, replace=TRUE),qnt=sample(1:10,52,replace = TRUE))
a

qnt_sum<-function(x,y,z){
  a %>% filter(index==x & factory==z) %>%
    filter(weeks > (y - 4) & weeks <= y)  %>%
    summarise(suma = sum(qnt)) 
}

a %>% 
  mutate(sum_qnt=lapply(index,qnt_sum,weeks,factory))

qnt_sum(2,5,'B')

但是在应用 mutate 时,我只得到了错误,使用这个特定的代码

错误:结果的长度必须为 16,而不是 52

但是我尝试使用此代码进行许多变体,但出现了很多不同的错误。我有一种感觉,我有错误的方法来解决这个问题。

期望值样本

在此处输入图像描述

标签: rdplyr

解决方案


这可能对您有用:

a %>% mutate(sum_qnt=mapply(qnt_sum, index, weeks, factory))

推荐阅读