将列导出为单独的csv文件

时间:2011-12-05 07:26:02

标签: r

我在R中有这个data.frame:

df <- structure(list(AA = c(0.3, 0.1, 0.6), BB = c(0.9, 0.4, 0.2),
CC = c(1, 0.8, 0.6), DD = c(0.7, 0.5, 0.5)), .Names = c("AA", "BB", "CC", "DD"), class = "data.frame", row.names = c(NA, -3L))

现在我需要的是写入单独的csv文件的列(AA,BB,CC,DD),以相应的列名称命名(AA.csv,BB.csv,CC.csv等)。

我是R的新手,并且知道如何使用write.csv为一列执行此操作,但只是看不到如何为许多列执行此操作(循环)...

2 个答案:

答案 0 :(得分:4)

使用for循环很容易,使用?paste构建文件名:

for (ci in 1:ncol(df)) {
    write.csv(df[,ci], paste("col", ci, ".csv", sep = ""))
}

现在检查一下是否按预期工作:

list.files(pattern =“csv”)

[1] "col1.csv" "col2.csv" "col3.csv" "col4.csv"

对每列使用ci计数器,我们将列上的data.frame分组并写入CSV,您可能需要write.csv的额外选项,尤其是row.names = FALSE。用

查看所有内容

(注意,如果你不使用行名,那么无论如何都不需要逗号,你确定要一个列CSV文件吗?)。

这些都是非常基本的R操作,因此您应该查看R的简介以及所使用的每个R函数和控件:

?Control 
?Extract
?seq
?ncol
?write.csv
?paste

答案 1 :(得分:3)

我除了@mdsummer的for循环之外,你可以使用一个应用结构,这是非常R-ish :)。一般的想法是获取您正在使用的对象的子集,并将函数应用于每个子集。我非常喜欢plyr package提供的应用函数系列。这应该是有用的(记得加载plyr包):

l_ply(names(df), function(x) write.csv(df[[x]], paste(x, ".csv", sep = ""))

plyr函数的名称表示输入是列表(l),并且该函数的输出被丢弃(_)。请参阅我上面链接的论文以获取更多详细信息。