R 将txt文件转换为csv并提取所选行
我有500个文件(保存在同一个目录中) 所有这些文件都具有相同的格式,如下所示。虽然excel可以识别它们有3列,但如果我使用R 将txt文件转换为csv并提取所选行,r,text,R,Text,我有500个文件(保存在同一个目录中) 所有这些文件都具有相同的格式,如下所示。虽然excel可以识别它们有3列,但如果我使用x加载,R只读取一列: 使用>list.files创建一个名称最简单的列表( ) 使用read.table循环浏览该列表,其中 参数或sep=“\t”(该文件中没有现在显示的逗号或标头。) 也许: lappy(flist,函数(x)赋值(x,读表(x)) …然后把这些结合在一起,也许用类似的东西 bigfile我认为您应该改进代码,使用read.table()函数导入自由
x加载,R只读取一列:
使用>list.files创建一个名称最简单的列表(
)
使用read.table循环浏览该列表,其中
参数或sep=“\t”(该文件中没有现在显示的逗号或标头。)
也许:
lappy(flist,函数(x)赋值(x,读表(x))
…然后把这些结合在一起,也许用类似的东西
bigfile我认为您应该改进代码,使用read.table()函数导入自由格式化(分隔的)数据文件,而不是rad.csv(),后者是专门为逗号分隔的文件编写的。正如DWin指出的,R中没有第0行。您可以尝试以下方法:
directory <- "your.work.directoty" # where your data files are.
# It depends on your OS (Windows, Linux, MacOS)
ndirectory <- "your.new.directory"
files <- dir(directory)
files.to.read <- paste(directory, files, sep="/")
files.to.write <- paste(ndirectory, files, sep="/")
for(i in 1:length(files.to.read) )
{
d <- read.table(files.to.read[i], header=TRUE)
temp <- d[c(1,seq(100, 9000, by=100)), ]
write.table(temp, file=files.to.write[i],
row.names=FALSE)
}
directory我觉得这个答案的格式有点奇怪。@Adamlerich有什么特别的吗?我想他是在否决我,因为我在一个代码框里放了一个大纲。他肯定不是在抱怨其他SO答案的链接格式,因为它是在SO接口中硬编码的。我假设它是一个m我把它当作你的“提纲”是在一个代码框中。你想这样做吗?一定有更好的方法。可能是块引号?至少不会有语法高亮显示。用户界面中不太支持创建带有副标题的列表。Ramon:感谢你的脚本。我有相同的任务。但R返回一个错误:read.table(files.to.read[I]中的错误],header=TRUE):列数多于列名
。如何修复?此错误告诉您数据中的一列或多列没有列名。您必须修改所有文件。您可以在第一个之后添加打印(i)
和刷新控制台(){
在for
语句中,查看哪些文件有问题。可能是字段或小数点分隔符有问题。您可以在read.table函数中定义这两个字段:read.table(files.to.read[i],header=TRUE,sep=“;”,dec=“,”
。希望这有帮助。谢谢,我修复了错误:)!一个小问题。我想在每个文件中提取一段文本,并用提取的文本在新类别中创建新的文本。如何将其插入for{}语句?不确定我是否理解您的问题。是否要从每个文件名中提取文本,并将其设置为数据框中的新变量?如果为true,则可以从stringr
包中使用stru sub
(请参阅example(stru sub)
)函数。添加一行类似temp$class的新行
subextract <- bigfile[ seq(1, 9001 , by=100), ]
write.csv(subextract, file="smaller.csv") # will have commas
directory <- "your.work.directoty" # where your data files are.
# It depends on your OS (Windows, Linux, MacOS)
ndirectory <- "your.new.directory"
files <- dir(directory)
files.to.read <- paste(directory, files, sep="/")
files.to.write <- paste(ndirectory, files, sep="/")
for(i in 1:length(files.to.read) )
{
d <- read.table(files.to.read[i], header=TRUE)
temp <- d[c(1,seq(100, 9000, by=100)), ]
write.table(temp, file=files.to.write[i],
row.names=FALSE)
}