多个CSV文件的摘要如何将JMP定向到桌面上具有大约400个CSV文件(如数据库)的文件夹,创建一堆列并创建每个文件包含1行的摘要表?我可以单独做这个,但它需要永远,我希望我可以开发一个脚本来自动化。
Re:多个CSV文件的摘要你是对的.....感谢抓住这个错误
我修改了原始条目以纠正您发现的错误
Re:多个CSV文件的摘要我想你是想附加汇总表而不是数据表?
Names Default To Here( 1 );
dir = Pick Directory();
files = Files In Directory( dir );
dt = New Table( "concat", New Column( "File", character ) );
For( i = 1, i <= N Items( files ), i++,
If( Ends With( files[i], "csv" ), //just a check to make sure it's a csv
// Open the file
dt1 = Open( dir || files[i] );
//Get all of the numeric columns from the just opened file
thecolumns = dt1 << get column names( numeric );
// Create an output table of one row that contains the summary
// As many stats as desired can be added to the below to get all of the
// ones that are needed
dt1 << Summary( Mean( Eval( thecolumns ) ), Freq( "None" ), Weight( "None" ), output table name("tmpdt"));
// Add the summary table to the summary table
dt << concatenate( Data Table("tmpdt"), append to first table );
// Since what is wanted is the ID, not the file name, and the ID is
// the Sheeet name in the Excel spreadsheet, one has to get that value
// the the name of the data table, since that is where JMP 13 places the
// sheet name
dt:File[N Rows( dt ) ] = dt1 << Get Name;
// Close the no longer needed raw data table
Close( dt1, no save );
)
);Re:多个CSV文件的摘要这是我对所需脚本的看法。 它非常简单,并汇总了所有数字列,并将Excel工作表名称作为新列
以下是根据下一个回复中发现的问题进行编辑的
Names Default To Here( 1 );
dir = Pick Directory();
files = Files In Directory( dir );
dt = New Table( "concat", New Column( "File", character ) );
For( i = 1, i <= N Items( files ), i++,
If( Ends With( files[i], "csv" ), //just a check to make sure it's a csv
// Open the file
dt1 = Open( dir || files[i], private );
//Get all of the numeric columns from the just opened file
thecolumns = dt1 << get column names( numeric );
// Create an output table of one row that contains the summary
// As many stats as desired can be added to the below to get all of the
// ones that are needed
dt2 = dt1 << Summary( Mean( Eval( thecolumns ) ), Freq( "None" ), Weight( "None" ) );
// Add the summary table to the summary table
dt << concatenate( dt2, append to first table );
// Since what is wanted is the ID, not the file name, and the ID is
// the Sheeet name in the Excel spreadsheet, one has to get that value
// the the name of the data table, since that is where JMP 13 places the
// sheet name
dt:File[N Rows( dt ) ] = dt1 << Get Name;
// Close the no longer needed raw data table
Close( dt1, no save );Close( dt2, no save );
)
);
Re:多个CSV文件的摘要以下是文斯回应的变体;这允许每个文件中的不同列名。
Names Default to here(1);
dir = pick directory();
files = files in directory(dir);
//table to hold summary data
dts = New Table("Summary", New Column("filename", character));
for(i=1, i<=nitems(files), i++, //for each filename
if(endswith(files[i], "csv"), //if file is a csv
//open the file
dt1 = open( dir||files[i], private );
//add a row to the summary table
dts << Add Rows(1);
//save the filename to the data table
Column( dts, "filename" )[i] = files[i];
//get list of columns
cols = dt1 << Get Column Names();
//for each column
for ( c=1, c <= N Items(cols), c++,
//add mean column to summary table if it isn't already there
if ( Contains( dts << Get Column Names(); , Parse( Char( cols[c] ) || "_mean" ) ) < 1,
dts << New Column( Char( cols[c] ) || "_mean" );
);
//find the mean and write it to summary table
Column( dts, Char( cols[c] ) || "_mean" )[i] = ColMean( Column( dt1, cols[c] ) );
//add max column to summary table if it isn't already there
if ( Contains( dts << Get Column Names(); , Parse( Char( cols[c] ) || "_max" ) ) < 1,
dts << New Column( Char( cols[c] ) || "_max" );
);
//find the max and write it to summary table
Column( dts, Char( cols[c] ) || "_max" )[i] = ColMax( Column( dt1, cols[c] ) );
); //end loop each column
//close file
close(dt1, no save);
); //end check for csv
); //end loop for each fileRe:多个CSV文件的摘要总结如何?
Re:多个CSV文件的摘要以下是CSV文件中的数据。文件名也是患者标识符。如何通过列标题对其进行汇总,并在列中创建带有文件标识符的汇总数据表?您可以在屏幕截图的底部看到文件名的样子。
我可以将所有CSV转换为JMP文件吗?只是不确定它会有所帮助。
有谁知道数据表工具加载项是否适用于这种情况?
Re:多个CSV文件的摘要你能给出两张假表的截图以及你想要最终结果的样子吗?我无法弄清楚你在问什么。
Re:多个CSV文件的摘要抱歉耽搁了。在服务和不得不照顾病人。现在回过头来看看。
不,它们并不总是具有相同的列(A,B,C等),但它们具有相同的名称。
布赖恩
Re:多个CSV文件的摘要(忽略这个答案;文斯有更好的方法。)
如果你想要每个文件的统计数据,那么Vince的答案会有变化。 我也想象列是一致的......
path = "$desktop/csvFiles/";
files = Files In Directory( path );
answers = New Table( "Summary",
New Column( "N Rows", Numeric, "Continuous", Format( "Fixed Dec", 12, 0 ), Set Values( [] ) ),
New Column( "Mean(x)", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "Mean(y)", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "Mean(z)", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "sourceFile", character )
);
For( iFile = 1, iFile <= N Items( files ), iFile += 1,
file = path || files[iFile];
dt = Open( file, "text" );
dt2 = dt << Summary( Mean( :x ), Mean( :y ), Mean( :z ), Freq( "None" ), Weight( "None" ) );
answers << addrows( 1 );
answers:sourceFile = file || " " || Format( Creation Date( file ), "m/d/y h:m:s" );
answers:N Rows = dt2:N Rows[1];
answers:name( "Mean(x)" ) = dt2:name( "Mean(x)" )[1];
answers:name( "Mean(y)" ) = dt2:name( "Mean(y)" )[1];
answers:name( "Mean(z)" ) = dt2:name( "Mean(z)" )[1];
Close( dt, nosave ); // linked table closes too
);
我的文件看起来像这样
X,Y,Z
1,2,3
4,5,6
我使用手工制作的文件中的表脚本来获取摘要脚本。 可能有更好的方法来复制变量;在JMP 13中你可以使用这些想法这里在一个语句中分配整行。
Re:多个CSV文件的摘要所以我对此做了一些假设。我可能会离开。
所有csv文件都具有相同的列。
您想为每个文件创建每列的聚合摘要(例如,意思是)。
Names Default to here(1);
dir = pick directory();
files = files in directory(dir);
dt = New Table("concat", New Column("File", character));
for(i=1, i<=nitems(files), i++,
if(endswith(files[i], "csv"), //just a check to make sure it's a csv
//break();
dt1 = open(dir||files[i], private);
dt1 << New Column("File", character, set each value(files[i]));
dt<<CONCATENATE></CONCATENATE>