1:n [j!= 0]中的代码错误:NA / NaN参数

时间:2019-04-25 16:26:40

标签: r

我正在运行一个循环,该循环在2年每周的时间范围内,对销售信息与不同城市的变量列表的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

有人可以帮助我使此功能正常工作和/或提供有效的选项吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您弄错了表达式。撰写

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)