Я посмотрел на соответствующие вопросы, размещенные в разделе: " Как я могу более эффективно рассчитать наклон нескольких подмножеств фрейма данных? ", и мой статус новичка не позволяет мне комментировать эту темунапрямую (не знаю, как это сделать), поэтому я спрашиваю здесь:
Как избежать использования NA в наборе данных для обработки вычисления уклонов между несколькими категориями в кадре данных с использованием пакетных решений dplyr & broom?Вот пример сценария и результатов?
ОБРАЗЦЫ ДАННЫХ:
DOY<-c(102,102,102,102,102,102,102,102,102,102,212,212,212,212,212,212, 212,212,212,212)
LOCATION <- c(1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,3,3,3,3,3)
response <-c(NA,NA,NA,NA,NA,7,10,15,20,30,2,4,6,NA,8,10,15,20,30,NA)
ts <- c(0,10,20,30, 40,0,10,20,30,40,0,10,20,30,40,0,10,20,30,40)
test.data <- data.frame(cbind(DOY, LOCATION, response, ts))
library(dplyr)
library(broom)
test.data2 <- test.data %>% group_by(DOY) %>% do(tidy(lm(response ~ ts, data = .)))
test.data2 %>% filter(term == "ts")
РЕЗУЛЬТАТ ДЛЯ РАБОТЫ В ОДНОМ СОСТОЯНИИ (так как в строке достаточно данных без NA):
# A tibble: 2 x 6
# Groups: DOY [2]
# DOY term estimate std.error statistic p.value
# <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
# 1 102. ts 0.560 0.0721 7.77 0.00444
# 2 212. ts 0.278 0.247 1.13 0.303
НО ЕСЛИ В ГРУППЕ ИСПОЛЬЗУЕТСЯ НЕСКОЛЬКО КАТЕГОРИЙ, НЕ НЕТ:
test.dataX <- test.data %>% group_by(LOCATION, DOY) %>% do(tidy(lm(response ~ ts, data = .)))
РЕЗУЛЬТАТЫ В ОШИБКАХ:
# Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
# 0 (non-NA) cases
test.dataX %>% filter(term == "ts")
# Error in eval(lhs, parent, parent) : object 'test.dataX' not found
ПОПЫТКА 2: Я пытался na.omit в lm (),но это также не сработало:
test.dataX <- test.data %>% group_by(LOCATION, DOY) %>% do(tidy(lm(response ~ ts, data = ., na.action=na.omit)))
# Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
# 0 (non-NA) cases
ИДЕАЛЬНО, Я бы хотел, чтобы что-то было так (вместе с R2, если возможно - как мне добавить это к выводу выше)?
# DOY LOCATION slope R2
# 102 1 NA NA
# 102 2 0.560 0.953
# 212 1 0.149 0.966
# 212 3 0.650 0.966
########################
ПОЖАЛУЙСТА, СОВЕТУЙТЕ.СПАСИБО!