我有一个列表,如下:
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
答案 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