r-将一个csv文件拆分为多个txt文件

r-将一个csv文件拆分为多个txt文件,r,split,tab-delimited-text,R,Split,Tab Delimited Text,我需要将一个大的.csv文件(大约有9列,9000多行)拆分为一个单独的.txt文件,每行使用一个单独的.txt文件,并根据第一列中的名称命名每个新生成的文件 e、 g。 对于.csv文件: 01001_r1 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.47 8 01001_r2 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.46 8 01001_

我需要将一个大的.csv文件(大约有9列,9000多行)拆分为一个单独的.txt文件,每行使用一个单独的.txt文件,并根据第一列中的名称命名每个新生成的文件

e、 g。 对于.csv文件:

01001_r1    32.4327 -86.6190    0.65    0.20    0.15    1.33    5.47    8
01001_r2    32.4327 -86.6190    0.65    0.20    0.15    1.33    5.46    8
01001_r3    32.4327 -86.6190    0.80    0.15    0.05    1.33    5.23    10
01003_r1    30.4887 -87.6918    0.65    0.20    0.15    1.33    5.23    9
01003_r2    30.4887 -87.6918    0.80    0.15    0.05    1.33    5.25    9
01003_r3    30.4887 -87.6918    0.65    0.20    0.15    1.33    4.96    8
我将得到6个文件,每个文件有一行

输出文件中的列需要“制表符分隔”,并且文件不能包含行或列名

e、 g输出文件应如下所示:

01001_r1    32.4327 -86.6190    0.65    0.20    0.15    1.33    5.47    8
这就是我走到这一步的原因:

#set 'working directory'
setwd('C:/Users/Data/soils_data/sitesoil_in')

#identify data frame from .csv file
sd <- read.csv('site_soil.csv', sep="\t", header=F, fill=F)

lapply(1:nrow(sd), function(i) write.csv(sd[i,],
                                         file = paste0(sd[i,1], ".txt"),
                                         row.names = F, header = F,
                                         quote = F))
我无法消除列名称或用制表符分隔列。 我尝试使用header=F或col.names=F来消除标题,并使用sep=“\t”来分隔列,但它无法识别命令

我将感谢任何帮助。 谢谢 E

根据所有建议,这是一个更简单的代码:

#set 'working directory'
setwd('C:/Users/Elena/Desktop/DayCent_muvp_MODEL/DayCent_SourceData/soils_data/sitesoil_in')

#identify data frame from .csv file
sd <- read.csv('site_soil.csv', sep="\t", header=F, fill=F)

lapply(1:nrow(sd), 
       function(i) write.table(sd[i,],
                               file = paste0(sd[i,1], ".txt",collapse = ""),
                               row.names = FALSE, col.names = FALSE,
                               sep = "\t"
       ))
#设置“工作目录”
setwd('C:/Users/Elena/Desktop/DayCent\u muvp\u MODEL/DayCent\u SourceData/soils\u data/sitesoil\u in')
#从.csv文件中识别数据帧
sd试试这个

dat <-"01001_r1,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.47,8
01001_r2,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.46,8
01001_r3,32.4327,-86.6190,0.80,0.15,0.05,1.33,5.23,10
01003_r1,30.4887,-87.6918,0.65,0.20,0.15,1.33,5.23,9
01003_r2,30.4887,-87.6918,0.80,0.15,0.05,1.33,5.25,9
01003_r3,30.4887,-87.6918,0.65,0.20,0.15,1.33,4.96,8
"


df <- read.delim(file = textConnection(dat), sep = ',', header = FALSE)

df
#         V1      V2       V3   V4   V5   V6   V7   V8 V9
# 1 01001_r1 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.47  8
# 2 01001_r2 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.46  8
# 3 01001_r3 32.4327 -86.6190 0.80 0.15 0.05 1.33 5.23 10
# 4 01003_r1 30.4887 -87.6918 0.65 0.20 0.15 1.33 5.23  9
# 5 01003_r2 30.4887 -87.6918 0.80 0.15 0.05 1.33 5.25  9
# 6 01003_r3 30.4887 -87.6918 0.65 0.20 0.15 1.33 4.96  8

output_file_base <- "soil_"
output_file_ext <- ".tsv"

for(i in seq(nrow(df))){
    output_file <- paste0(output_file_base, as.character(i), output_file_ext)
    dfi <- df[i, ]
    write.table(x = dfi, file = output_file, sep = '\t', quote = FALSE, col.names = FALSE, row.names = FALSE)
}
试试这个

dat <-"01001_r1,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.47,8
01001_r2,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.46,8
01001_r3,32.4327,-86.6190,0.80,0.15,0.05,1.33,5.23,10
01003_r1,30.4887,-87.6918,0.65,0.20,0.15,1.33,5.23,9
01003_r2,30.4887,-87.6918,0.80,0.15,0.05,1.33,5.25,9
01003_r3,30.4887,-87.6918,0.65,0.20,0.15,1.33,4.96,8
"


df <- read.delim(file = textConnection(dat), sep = ',', header = FALSE)

df
#         V1      V2       V3   V4   V5   V6   V7   V8 V9
# 1 01001_r1 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.47  8
# 2 01001_r2 32.4327 -86.6190 0.65 0.20 0.15 1.33 5.46  8
# 3 01001_r3 32.4327 -86.6190 0.80 0.15 0.05 1.33 5.23 10
# 4 01003_r1 30.4887 -87.6918 0.65 0.20 0.15 1.33 5.23  9
# 5 01003_r2 30.4887 -87.6918 0.80 0.15 0.05 1.33 5.25  9
# 6 01003_r3 30.4887 -87.6918 0.65 0.20 0.15 1.33 4.96  8

output_file_base <- "soil_"
output_file_ext <- ".tsv"

for(i in seq(nrow(df))){
    output_file <- paste0(output_file_base, as.character(i), output_file_ext)
    dfi <- df[i, ]
    write.table(x = dfi, file = output_file, sep = '\t', quote = FALSE, col.names = FALSE, row.names = FALSE)
}
我调整了你的代码:

lapply(1:nrow(sd),
    function(i) write.table(sd[i,],
                            file = paste0(sd[i,1],".txt",collapse = ""),
                            row.names = FALSE,
                            sep = "\t"
                            ))
我调整了你的代码:

lapply(1:nrow(sd),
    function(i) write.table(sd[i,],
                            file = paste0(sd[i,1],".txt",collapse = ""),
                            row.names = FALSE,
                            sep = "\t"
                            ))

这可能对你想要实现的目标有用

df  <-read.csv(text = "01001_r1,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.47,8
01001_r2,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.46,8
01001_r3,32.4327,-86.6190,0.80,0.15,0.05,1.33,5.23,10
01003_r1,30.4887,-87.6918,0.65,0.20,0.15,1.33,5.23,9
01003_r2,30.4887,-87.6918,0.80,0.15,0.05,1.33,5.25,9
01003_r3,30.4887,-87.6918,0.65,0.20,0.15,1.33,4.96,8",
stringsAsFactors = FALSE,
header = FALSE)


apply(df, 1, function(x){write.table(t(x), 
                                     file = paste0(x[1],".txt"), 
                                     sep = "\t", 
                                     quote = FALSE, 
                                     col.names = FALSE, 
                                     row.names = FALSE)})

df这可能适用于您试图实现的目标

df  <-read.csv(text = "01001_r1,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.47,8
01001_r2,32.4327,-86.6190,0.65,0.20,0.15,1.33,5.46,8
01001_r3,32.4327,-86.6190,0.80,0.15,0.05,1.33,5.23,10
01003_r1,30.4887,-87.6918,0.65,0.20,0.15,1.33,5.23,9
01003_r2,30.4887,-87.6918,0.80,0.15,0.05,1.33,5.25,9
01003_r3,30.4887,-87.6918,0.65,0.20,0.15,1.33,4.96,8",
stringsAsFactors = FALSE,
header = FALSE)


apply(df, 1, function(x){write.table(t(x), 
                                     file = paste0(x[1],".txt"), 
                                     sep = "\t", 
                                     quote = FALSE, 
                                     col.names = FALSE, 
                                     row.names = FALSE)})


df check write.table-您的方法再次将其保存为.csv,这在您的情况下是不可取的。你能解释一下这个仅仅有用的分割成成千上万个散落在你磁盘上的.txt文件背后的意图吗?谢谢Christian,我已经尝试过了,但是如果我使用write.table而不是write.csv,它会给我一个错误。。。这些是为模型输入生成文件的其他代码的输入文件。后面的代码要求这些文件采用非常特定的格式来识别信息。您将需要调查给出的错误
write.csv
是文档(
?write.table
)中描述的
write.table
)的包装器,不具有灵活性。根据我的经验,使用
write.table
并手动指定所需的正确参数几乎总是比使用
write.csv
并希望其参数是您需要的参数要好。谢谢用户5359531,我将按照您的建议检查参数,查看是否可以找到错误源。检查write.table-您的方法将其再次保存为.csv,这在您的情况下是不可取的。你能解释一下这个仅仅有用的分割成成千上万个散落在你磁盘上的.txt文件背后的意图吗?谢谢Christian,我已经尝试过了,但是如果我使用write.table而不是write.csv,它会给我一个错误。。。这些是为模型输入生成文件的其他代码的输入文件。后面的代码要求这些文件采用非常特定的格式来识别信息。您将需要调查给出的错误
write.csv
是文档(
?write.table
)中描述的
write.table
)的包装器,不具有灵活性。根据我的经验,使用
write.table
并手动指定所需的正确参数几乎总是比使用
write.csv
并希望其参数是您需要的参数要好。谢谢用户5359531,我将按照您的建议检查参数,看看是否可以找到错误的来源。再次感谢。我试着转换成df,它对有限的数据非常有效。问题是,有9000多行,我最终得到了8000行代码。。。我试图找到一个更简单的解决方案…col.names参数缺少一个逗号!真有趣。我意识到正在查看您的代码,再次感谢您的帮助。“问题是,有9000多行代码,我最终得到了8000行代码。”不确定您的意思,我希望您没有在脚本中嵌入整个CSV文件内容?您的原始帖子显示您正在将CSV直接读入df。我不清楚除此之外您还需要哪些代码行。对不起@user5359531,我误解了您的答案。我明白你的意思。谢谢你的帮助,再次感谢。我试着转换成df,它对有限的数据非常有效。问题是,有9000多行,我最终得到了8000行代码。。。我试图找到一个更简单的解决方案…col.names参数缺少一个逗号!真有趣。我意识到正在查看您的代码,再次感谢您的帮助。“问题是,有9000多行代码,我最终得到了8000行代码。”不确定您的意思,我希望您没有在脚本中嵌入整个CSV文件内容?您的原始帖子显示您正在将CSV直接读入df。我不清楚除此之外您还需要哪些代码行。对不起@user5359531,我误解了您的答案。我明白你的意思。谢谢你的帮助,很有效!谢谢为什么它以前不认识write.table?现在我只需要找出如何消除列名。再次感谢!它起作用了!谢谢为什么它以前不认识write.table?现在我只需要找出如何消除列名。再次感谢!谢谢你,马特。我试着转换成df,它对有限的数据非常有效。问题是,有9000多行,我最终得到了8000行代码。。。我试图找到一个更简单的解决方案。。。无论如何,我会保留你的代码供以后使用,再次感谢!这篇文章发表已经有一段时间了,但是你怎么能修改一个块而不是一行的代码呢?例如,20行?我可能会将数据帧拆分为20行数据帧的列表
ldf谢谢Matt。我试着转换成df,它对有限的数据非常有效。问题是,有9000多行,我最终得到了8000行代码。。。我试图找到一个更简单的解决方案。。。无论如何,我会保留你的代码供以后使用,再次感谢!这篇文章发表已经有一段时间了,但是你怎么能修改一个块而不是一行的代码呢?例如,20行?我可能会将数据帧拆分为20行的列表