Ошибка кода в 1: n [j! = 0]: аргумент NA / NaN - PullRequest
0 голосов
/ 25 апреля 2019

Я выполняю цикл, который запускает линейную регрессию на 130 различных фреймах данных в информации о продажах в сравнении со списком переменных для разных городов в течение двухлетнего еженедельного периода времени.Есть города с нулевыми значениями, и это потому, что в то время не было продаж, потому что в то время у нас не было мест в этом городе.Я хотел бы только посмотреть на значения в фрейме данных, которые имеют значения продаж (! = 0,> 0).

Я попытался с помощью функции index <- 1:n[td$sales!=0] экстраполировать значения и затем запустить lm.

lmresults <- NULL
lm <- list()
models <- list()
#datalist is a list that stores 130 dataframes of the city information
for ( i in 1:length(datalist) ) {
  td             <- as.data.frame(datalist[i])
  n              <- length(td$sales)
#function I am trying to resolve
  index          <- 1:n[td$sales!=0]
  td2            <- td[index]
  m              <- lm(sales  ~ . -Period.1, data=td2)
  iter           <- i
  Nat.pVal       <- summary(m)$coefficients[,"Pr(>|t|)"][14]
  Loc.pVal       <- summary(m)$coefficients[,"Pr(>|t|)"][15]
  Nat.coeff <- coef(m)["National.Media"]
  Loc.coeff <- coef(m)["local"]
  temp           <- data.table(cbind(Nat.pVal, Loc.pVal,iter,Nat.coeff,Loc.coeff))
  lmresults      <- rbind(lmresults, temp)
  lm[[i]] <- summary(m)
  models[[i]] <- m
}

Что я наблюдаю: Error in `[.data.frame`(td, index) : undefined columns selected In addition: Warning message: In 1:n[td$sales != 0] : numerical expression has 104 elements: only the first used

Может ли кто-нибудь помочь мне заставить эту функцию работать и / или предоставить варианты, которые работают?Thnx!

1 Ответ

1 голос
/ 25 апреля 2019

Вы неправильно поняли выражение.Когда вы пишете

1:n[td$sales != 0]

R интерпретирует его как

1:(n[td$sales != 0])

Поскольку n содержит только один элемент, это не имеет смысла.Вам нужно написать это как

(1:n)[td$sales != 0]

, чтобы индексировать вектор 1:n.Позже возникнет еще одна проблема: после построения index у вас будет

td2            <- td[index]

. Из-за способа реализации фреймов данных выбираются столбцы, а не строки.Вы должны использовать

td2            <- td[index, ]

Другой способ сделать обе части одновременно -

td2            <- subset(td, sales != 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...