在R中将回归摘要写入CSV文件

6

我有一家公司销售各种产品的收入数据(csv文件),其中之一看起来如下所示:

> abc
   Order.Week..BV. Product.Number Quantity Net.ASP Net.Price
1         2013-W44        ABCDEF       92  823.66       749
2         2013-W44        ABCDEF       24  898.89       749
3         2013-W44        ABCDEF      243  892.00       749
4         2013-W45        ABCDEF       88  796.84       699
5         2013-W45        ABCDEF       18  744.80       699

现在,我正在拟合一个多元回归模型,其中Net.Price作为Y,Quantity、Net.ASP作为x1和x2。有100多个这样的文件,我正试图使用以下代码完成它:

fileNames <- Sys.glob("*.csv")

for (fileName in fileNames) {      

abc <- read.csv(fileName, header = TRUE, sep = ",")

fit <- lm(Net.Price ~ Quantity + Net.ASP, data = abc)

x <- data.frame (abc, summary(fit))

write.csv (x, file = fileName)

}

现在,我理解这一行代码 x <- data.frame (abc, summary(fit)) 是错误的,因为它显示了以下错误信息:Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class ""summary.lm"" to a data.frame ,但是我想要将每个csv文件的回归模型摘要写入文件本身。请帮忙。


你想将摘要的哪一部分添加到数据框中呢?summary返回了很多无法转换为向量的“垃圾”,除非你将其转换为list - David Arenburg
我想要所有的估计值、R平方和p值。至少,所有的估计值就可以了。 - souravsarkar59
为了获得估计值,您可以执行以下操作:x <- cbind(abc, t(as.numeric(coefficients(fit)))); names(x)[(length(x) - 2):length(x)] <- names(coefficients(fit)) - David Arenburg
无法工作。显示以下错误:Error in file(file, ifelse(append, "a", "w")) : cannot open the connection In addition: Warning message: In file(file, ifelse(append, "a", "w")) : cannot open file 'A3G47AV.csv': Permission denied - souravsarkar59
这个错误与我的代码无关。它是由你提供的数据引起的。 - David Arenburg
2个回答

9

使用以下方法可以非常容易地写入文本文件:

sink("summary.txt")
summary(lm)
sink()

我考虑过这个问题。但是这里有100多个不同名称的CSV文件,这样行得通吗? - souravsarkar59
是的,您想要将它们全部保存在一个文件中吗?您肯定可以这样做。或者,如果您想要将它们保存在与.csv文件对应的100个不同的txt文件中,您可以使用csv名称创建文件名。例如,fname <- paste("summary", "abc.csv"); sink(fname); summary(lm); sink() - Koundy

4
根据您的数据集和评论,我会做类似的操作:
abc <- read.table(text = "
Order.Week..BV.    Product.Number    Quantity    Net.ASP    Net.Price
1         2013-W44        ABCDEF       92  823.66       749
2         2013-W44        ABCDEF       24  898.89       749
3         2013-W44        ABCDEF      243  892.00       749
4         2013-W45        ABCDEF       88  796.84       699
5         2013-W45        ABCDEF       18  744.80       699", header = T) # Yor data

fit <- lm(Net.Price ~ Quantity + Net.ASP, data = abc)
x <- cbind(abc, t(as.numeric(coefficients(fit))), t(as.numeric(summary(fit)$coefficients[, 4])), summary(fit)$r.squared)
names(x)[(length(x) - 6):length(x)] <- c(paste("coeff", names(coefficients(fit))), paste("P-value", names(summary(fit)$coefficients[, 4])), "R-squared")

这将返回

  Order.Week..BV. Product.Number Quantity Net.ASP Net.Price coeff (Intercept) coeff Quantity coeff Net.ASP P-value (Intercept) P-value Quantity
1        2013-W44         ABCDEF       92  823.66       749          434.0829    0.001853692     0.3545852          0.09474093        0.9898202
2        2013-W44         ABCDEF       24  898.89       749          434.0829    0.001853692     0.3545852          0.09474093        0.9898202
3        2013-W44         ABCDEF      243  892.00       749          434.0829    0.001853692     0.3545852          0.09474093        0.9898202
4        2013-W45         ABCDEF       88  796.84       699          434.0829    0.001853692     0.3545852          0.09474093        0.9898202
5        2013-W45         ABCDEF       18  744.80       699          434.0829    0.001853692     0.3545852          0.09474093        0.9898202
  P-value Net.ASP R-squared
1       0.1865054 0.7165826
2       0.1865054 0.7165826
3       0.1865054 0.7165826
4       0.1865054 0.7165826
5       0.1865054 0.7165826

现在它可以工作了。错误是由于路径规范不正确造成的。 - souravsarkar59

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接