我正在运行一个循环,该循环在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
有人可以帮助我使此功能正常工作和/或提供有效的选项吗?谢谢!
答案 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)