拆分后的数据框列名

时间:2013-10-02 10:21:39

标签: r dataframe

执行以下代码时

data <- data.frame( A = c("foo", "foo", "bar", "bar"),
                    B = c("foo","bar", "foo", "bar"),
                    C = c("bla", "foo", "bla", "bar"),
                    D = c(1, 2, 3, 4 ),
                    E = c(5, 6, 7, 8 ))

ds <- split(data, list(data$A, data$B, data$C), drop=TRUE)
write.table(ds[1], file="foo.csv", append=FALSE, row.names=FALSE)

foo.csv看起来像这样:

 "bar.bar.bar.A","bar.bar.bar.B","bar.bar.bar.C","bar.bar.bar.D","bar.bar.bar.E"
 "bar","bar","bar",4,8

即,列名包含用于拆分的列的内容。如何以通用方式将名称更改回原始名称? (我不想指定列名如“A”,“B”,....)

1 个答案:

答案 0 :(得分:2)

split的输出为listds[1]会返回list,而ds[[1]]会返回该第一个列表项中的值。

示例:

ds[1]
# $bar.bar.bar
#     A   B   C D E
# 4 bar bar bar 4 8

ds[[1]]
#     A   B   C D E
# 4 bar bar bar 4 8

要将输出正确地写为CSV文件,您需要提取实际的data.frame,因此您需要使用ds[[1]]方法。

write.table(ds[[1]], file="foo.csv", append=FALSE, row.names=FALSE)

如果您想将所有data.frame写入单独的CSV文件,您可以执行以下操作:

lapply(names(ds), function(x) {
  write.table(ds[[x]], file = paste(x, ".csv", collapse = ""),
              append = FALSE, row.names = FALSE)
})

这将在您的工作目录中创建四个CSV文件(名为bar.bar.bar.csv,bar.foo.bla.csv,foo.foo.bla.csv和foo.bar.foo.csv)。 / p>

相关问题