r-将一个csv文件拆分为多个txt文件
我需要将一个大的.csv文件(大约有9列,9000多行)拆分为一个单独的.txt文件,每行使用一个单独的.txt文件,并根据第一列中的名称命名每个新生成的文件 e、 g。 对于.csv文件: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_
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行的列表