在group_by()中的mutate()内的lm()

bla*_*zej 4 r lm dplyr

我正在寻找一种方法来向我的数据表中添加一个列,该列由residuals一个lm(a~b)为不同级别单独计算的函数组成c

我被建议调查sort_by(c)功能,但似乎没有用lm(a~b)

我的工作示例数据如下所示:

结果数据框架

列主题,试验和rt都在a之内data.frame,我的目标是计算Zre_SPSS(我最初在SPSS中制作)但是来自一个R函数.

我试过了

data %<>% group_by (subject) %>% 
  mutate(Zre=residuals(lm(log(rt)~trial)))
Run Code Online (Sandbox Code Playgroud)

但它不起作用 - Zre得到计算但不是分别在每个主题内,而是整个数据框.

有人可以帮我吗?我是一个完整的R(和一般的编码)新手,所以请原谅我,如果这个问题是愚蠢的或重复的,我很可能不理解其他解决方案或他们找不到解决方案.最好的祝福.

根据Ben Bolker的要求,这里是R代码,用于从excel屏幕截图生成数据

#generate data
  subject<-c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3)
  subject<-factor(subject)
  trial<-c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6)
  rt<-c(300,305,290,315,320,320,350,355,330,365,370,370,560,565,570,575,560,570)

#Following variable is what I would get after using SPSS code
  ZreSPSS<-c(0.4207,0.44871,-1.7779,0.47787,0.47958,-0.04897,0.45954,0.45487,-1.7962,0.43034,0.41075,0.0407,-0.6037,0.0113,0.61928,1.22038,-1.32533,0.07806)

#make data frame
  sym<-data.frame(subject, trial, rt, ZreSPSS)
Run Code Online (Sandbox Code Playgroud)

Hon*_*Ooi 5

它看起来像dplyr 0.5中的一个错误mutate,lm在一个组内仍然会尝试使用完整的数据集.你可以do改用:

sym %>% group_by(subject) %>% do(
{
    r <- resid(lm(log(rt) ~ trial, data = .))
    data.frame(., r)
})
Run Code Online (Sandbox Code Playgroud)

这仍然与您的SPSS列不匹配,但它是您给出的数据的正确结果.您可以通过手动为每个主题拟合模型并检查残差来验证这一点.

(其他类型的残差包括rstandard标准化和rstudent学生化残差.它们仍然与您的SPSS数字不匹配,但可能正是您正在寻找的.)