Я получил много хороших отзывов в вопросе который я недавно спросил, и руководствовался использованием dplyr для преобразования некоторых данных. У меня проблема с lm() и попытка найти наклон из этих преобразованных данных, и я решил открыть новый вопрос.
Сначала у меня есть данные, которые выглядят так:
Var1 Var2 Var3 Time Temp
a w j 9/9/2014 20
a w j 9/9/2014 15
a w k 9/20/2014 10
a w j 9/10/2014 0
b x L 9/12/2014 30
b x L 9/12/2014 10
b y k 9/13/2014 20
b y k 9/13/2014 15
c z j 9/14/2014 20
c z j 9/14/2014 10
c z k 9/14/2014 11
c w l 9/10/2014 45
a d j 9/22/2014 20
a d k 9/15/2014 4
a d l 9/15/2014 23
a d k 9/15/2014 11
И я хочу это в форме этого (значения для Slope и Pearson, смоделированные для иллюстрации):
V1 V2 V3 Slope Pearson
a w j -3 -0.9
a w k 2 0
a d j 1.5 0.6
a d k 0 0.5
a d l -0.5 -0.6
b x L 12 0.7
b y k 4 0.6
c z j -1 -0.5
c z k -3 -0.4
c w l -10 -0.9
Наклон, являющийся линейно-наименьшим квадратным наклоном. Теоретически script будет выглядеть так:
library(dplyr)
data <- read.table("clipboard",sep="\t",quote="",header=T)
newdata = summarise(group_by(data
,Var1
,Var2
,Var3
)
,Slope = lm(Temp ~ Time)$coeff[2]
,Pearson = cor(Time, Temp, method="pearson")
)
Но R вызывает ошибку, так как не может найти Time или Temp. Он может запускать lm(data$Temp ~ data$Time)$coeff[2]
, но возвращает наклон для всего набора данных, а не подмножествую форму, которую я ищу. cor()
похоже, отлично работает в разделе group_by
, так что есть специальный синтаксис, который мне нужно передать в lm()
, чтобы он выполнялся аналогичным образом или полностью использовал другую функцию, чтобы получить наклон, пройденный из подмножество?