R逐行将列表写入CSV

时间:2018-01-05 20:24:22

标签: r list csv

我在R中有以下代码:

q)show tab:([]a:1 2 3;b:`CASPER`FOO`BAR)
a b
--------
1 CASPER
2 FOO
3 BAR
q)select from tab where any b like/:("CASPER";"FOO")
a b
--------
1 CASPER
2 FOO

我正在尝试将随机森林预测的结果写入csv文件。

结果train_predict如下所示:

enter image description here

当我运行上面的代码时,它只将每行的第一列写入csv而不是全部三列。

如何将列表的所有三列都写入文件?

还有一种方法在R中有一种方法可以在写入之前清除csv,以防它已经存在吗?

2 个答案:

答案 0 :(得分:1)

不是串行编写,而是可以转换为data.frame,只需一次写入:

生成与您发布的内容类似的虚假数据:

fakeVec <- function(dummy) t(setNames(rnorm(3), letters[1:3]))
my_list <- lapply(0:4, fakeVec)
names(my_list) <- 6000:6004

这是假数据:

$`6000`
              a          b         c
[1,] -0.2444195 -0.2189598 -1.442364

$`6001`
             a        b          c
[1,] 0.2742636 1.068294 -0.8335477

$`6002`
            a        b         c
[1,] -1.13298 1.927268 -2.123603

$`6003`
             a        b            c
[1,] 0.8260184 1.003259 -0.003590849

$`6004`
              a         b         c
[1,] -0.2025963 0.1192242 -1.121807

然后转换格式:

# crush to flat matrix
my_mat <- do.call(rbind, my_list)
# add in list names as new column
my_df <- data.frame(id = names(my_list), my_mat)

现在你有一个像这样的data.frame:

    id          a          b            c
1 6000 -0.2444195 -0.2189598 -1.442364429
2 6001  0.2742636  1.0682937 -0.833547659
3 6002 -1.1329796  1.9272681 -2.123603334
4 6003  0.8260184  1.0032591 -0.003590849
5 6004 -0.2025963  0.1192242 -1.121807439

您可以直接写入文件:

write.csv(my_df, 'my_file.csv', row.names=F)

答案 1 :(得分:0)

这个怎么样?

temp = list(x = data.frame(a = "a", b = "b", c = "c"),
        y = data.frame(d = "d", e = "e", f = "f"),
        z = data.frame(g = "g", h = "h", i = "i"))

for (i in 1:length(temp)) {
  write.table(temp[[i]], "temp.csv",col.names = F, append = T)
}

关于清除csv。如果我正确理解了您的问题,请删除append = T