首页 > 解决方案 > 将一个csv文件分成四个不同的文件

问题描述

我有一个 datasetdataset.csv和一个 array v,它们具有相同的行数。数据集示例:

1   1   1   2   3
2   2   1   2   3
3   1   1   1   1
4   2   2   2   1
5   2   2   3   2
6   1   2   3   2
7   2   1   2   2
8   1   1   3   2
9   1   1   3   3

数组的一个例子v

1
4
2
3
3
1
2
1
4

我想dataset.csv根据 array 将文件分成四个 cvs 文件v。例如v[1]=1,这意味着dataset.csv进入文件的第一行dataset-1.csvv[2]=4这意味着第二行dataset.csv进入文件dataset-4.csv等等。

换句话说,我们有四个文件dataset-1.csv

1   1   1   2   3
6   1   2   3   2
8   1   1   3   2

dataset-2.csv

3   1   1   1   1
7   2   1   2   2

dataset-3.csv

4   2   2   2   1
5   2   2   3   2

dataset-4.csv

2   2   1   2   3
9   1   1   3   3

请问有什么想法吗?

标签: rcsv

解决方案


利用split

out <- split(df1, v)
out
#$`1`
#  V1 V2 V3 V4 V5
#1  1  1  1  2  3
#6  6  1  2  3  2
#8  8  1  1  3  2

#$`2`
#  V1 V2 V3 V4 V5
#3  3  1  1  1  1
#7  7  2  1  2  2

#$`3`
#  V1 V2 V3 V4 V5
#4  4  2  2  2  1
#5  5  2  2  3  2

#$`4`
#  V1 V2 V3 V4 V5
#2  2  2  1  2  3
#9  9  1  1  3  3

Map您可以使用和保存所有四个文件write.csv

path <- "path/to/file/"
Map(write.csv, x = out, file = paste0(path, "dataset-", names(out), ".csv"))

数据

df1 <- read.table(text = "1   1   1   2   3
2   2   1   2   3
3   1   1   1   1
4   2   2   2   1
5   2   2   3   2
6   1   2   3   2
7   2   1   2   2
8   1   1   3   2
9   1   1   3   3", header = FALSE)

推荐阅读