R函数write.csv
返回错误。
这是我想写的data.frame:
> VaRStats
A Index B Index C Index
Daily VaR -0.65006 -0.50391 -0.5557
Daily CVaR -0.75679 -0.57491 -0.65174
5 Days VaR -1.4204 -1.0077 -1.2269
这是VaRStats
的类:
> class(VaRStats)
[1] "data.frame"
这是dput()
的{{1}}输出:
VaRStats
通过> dput(VaRStats)
structure(list(`JWFXA Index` = structure(list(`NA` = -0.650061101980277,
`NA` = -0.756791819719978, `JWFXA Index` = -1.42035638029947), .Names = c(NA,
NA, "JWFXA Index")), `CCYT1 Index` = structure(list(`NA` = -0.503912574910245,
`NA` = -0.574907003405759, `CCYT1 Index` = -1.00773735259718), .Names = c(NA,
NA, "CCYT1 Index")), `FX Multistrategy Index` = structure(list(
`NA` = -0.555699685451229, `NA` = -0.651738541799373, `FX Multistrategy Index` = -1.22688572580144), .Names = c(NA,
NA, "FX Multistrategy Index"))), .Names = c("JWFXA Index", "CCYT1 Index",
"FX Multistrategy Index"), row.names = c("Daily VaR", "Daily CVaR",
"5 Days VaR"), class = "data.frame")
函数生成的错误
write.csv
这怎么可能?
答案 0 :(得分:8)
在这里你可以这样做:
write.csv(as.matrix(dd), "SummaryStats.csv")
这是有效的,因为所有列都是数字。
read.csv("SummaryStats.csv")
X JWFXA.Index CCYT1.Index FX.Multistrategy.Index
1 Daily VaR -0.6500611 -0.5039126 -0.5556997
2 Daily CVaR -0.7567918 -0.5749070 -0.6517385
3 5 Days VaR -1.4203564 -1.0077374 -1.2268857
修改强>
这个解决方案是正确的。
如果你的一个列表中有一个字符串:
dd[1,1] <- 'a'
as.matrix(dd)
JWFXA Index CCYT1 Index FX Multistrategy Index
Daily VaR "a" -0.5039126 -0.5556997
Daily CVaR -0.7567918 -0.574907 -0.6517385
5 Days VaR -1.420356 -1.007737 -1.226886
但使用as.numeric
将失败或至少转换为NA
sapply(dd, as.numeric)
JWFXA Index CCYT1 Index FX Multistrategy Index
[1,] NA -0.5039126 -0.5556997
[2,] -0.7567918 -0.5749070 -0.6517385
[3,] -1.4203564 -1.0077374 -1.2268857
Warning message:
答案 1 :(得分:4)
由于无法解释的原因,您的数据框列是列表,而不是矢量。您可以使用以下命令将数据帧转换回“普通”格式:
df <- sapply(VaRStats, as.numeric)
rownames(df) <- rownames(VarStats)
write.csv(df, "yourfile.csv")
答案 2 :(得分:1)
您的列是列表。他们应该是矢量。试试这个。
VaRStats<-sapply(VaRStats,unlist)
write.csv(VaRStats,file="...")
答案 3 :(得分:0)
你能给出一个可重复的例子吗,我猜你在row.names
和col.names
时遇到问题,也使用write.table
,这样就可以根据需要设置所有参数< / p>
编辑:我有同样的问题看str
!!!
R) str(test)
'data.frame': 3 obs. of 3 variables:
$ JWFXA Index :List of 3
..$ NA : num -0.65
..$ NA : num -0.757
..$ JWFXA Index: num -1.42
$ CCYT1 Index :List of 3
..$ NA : num -0.504
..$ NA : num -0.575
..$ CCYT1 Index: num -1.01
$ FX Multistrategy Index:List of 3
..$ NA : num -0.556
..$ NA : num -0.652
..$ FX Multistrategy Index: num -1.23
您的数据不是公共data.frame
@juba有一个很好的解决方法,使用lapply
将每个列表转换为numeric
向量
答案 4 :(得分:0)
尝试检查每个列的变量类型。写csv不喜欢列表类型的列。
例如,在星际大战数据集中,“电影”,“飞行器”和“飞船”列的类型为列表:
> data(starwars)
> class(starwars$vehicles)
[1] "list"
> class(starwars$starships)
[1] "list"
> class(starwars$films)
[1] "list"
答案 5 :(得分:0)
尝试使用此
df <- do.call(rbind.data.frame, VaRStats)
write.csv(df, "path\VaRStats.csv")
第一行从列表转换为数据框,然后可以导出到csv文件