如何将列表中的每个元素写入R中的不同行?

时间:2016-08-18 09:32:43

标签: r csv

我有一个列表,如下:

x <- 2
y <- "sdsd"
z <- 2323322
a_list <- list("x" = x, "y" = y, "z" = z)

> a_list
$x
[1] 2

$y
[1] "sdsd"

$z
[1] 2323322

我想将此列表写入csv文件,每个元素占一行。我试过write.csv(a_list, file = "abc.csv")并得到了这个

    x   y       z
1   2   sdsd    2323322

如果转置结果,那就是我想要的:

x, 2
y, sdsd
z, 2323322

3 个答案:

答案 0 :(得分:3)

这是我的答案,

x <- 2
y <- "sdsd"
z <- 2323322
a_list <- list("x" = x, "y" = y, "z" = z)

write.csv(t(as.data.frame(a_list)), file= "abc.csv")

我从以下https://stackoverflow.com/a/27594632/1945827回答中得到了。

因此,将列表更改为data.frame,转置并写入以给予,

    V1
x   2
y   sdsd
z   2323322

您可能想要对“&#39; V1&#39;列名。

答案 1 :(得分:2)

#Data
x <- 2
y <- "sdsd"
z <- 2323322
a_list <- list("x" = x, "y" = y, "z" = z)

#To show it works
rbind(a_list[1], a_list[2], a_list[3])
     x      
[1,] 2      
[2,] "sdsd" 
[3,] 2323322

#Save
write.csv(rbind(a_list[1], a_list[2], a_list[3]), "data.csv")

您还可以添加行名称:

data<-rbind(a_list[1], a_list[2], a_list[3])
rownames(data)<-c("x,","y,","z,")

或更简单的方式:

 write.csv(cbind(a_list), "data.csv")

答案 2 :(得分:2)

你很亲密,但你不会轻易放松。我没有检查代码,但我猜测write.table在将内容推送到文件之前将列表强制转换为data.frame,如下所示:

> as.data.frame(a_list)
  x    y       z
1 2 sdsd 2323322

这很好,但你想要反过来,其中列应该是行名。您可以使用函数t()

> t(as.data.frame(a_list))
  [,1]     
x "2"      
y "sdsd"   
z "2323322"

现在可以将其推送到write.table,可以对其进行自定义以进行出价。

这里我明确地打开了行名(它已经是默认值)并关闭了列名。在这种情况下不需要引用,所以它们也是关闭的。

write.table(t(as.data.frame(a_list)), 
            file = "myfile.txt", 
            row.names = TRUE, 
            col.names = FALSE,
            quote = FALSE)

myfile.txt的内容:

x 2
y sdsd
z 2323322

如果你在写完字母之后有点逗号,你可以做

out <- t(as.data.frame(a_list))
rownames(out) <- paste(rownames(out), ",", sep = "")

write.table(out, 
            file = "myfile.txt", 
            row.names = TRUE, 
            col.names = FALSE,
            quote = FALSE)

x, 2
y, sdsd
z, 2323322