안녕,
"apple"이 포함된 모든 열을 삭제하고 특정 값이 -9999인 모든 행(열에 관계없이)을 삭제하고 싶습니다. 열을 삭제하는 코드를 시작했지만 얻지 못했습니다.
감사.
dt = Open("file.csv");
//dt = Open( "$SAMPLE_DATA/Cities.jmp" );
col_list = dt << get column names( string );
For( i = N Items( col_list ), i > 0, i--,
If(Contains( col_list[i], "apple" ),
Remove From( col_list, i ),
)
);
//dt << Select Where( );
//dt << Delete Rows;
dt << save( "testOUT.txt" );아주 간단한 스크립트 변경입니다.데이터 입력을 위한 모든 특수 옵션을 제거할 수 있습니다.Open() 함수는 기본값을 사용합니다.
두 번째로, 행 삭제에 대해 수행해야 하는 모든 작업은 입력 열이 본질적으로 문자로 결정될 때 문자열 값 "-9999"를 검색하는 것입니다.
이름의 기본값은 Here(1)입니다.
dt=열기(
"파일(3).csv");
// 삭제할 열을 배치할 목록을 만듭니다.
델리스트 = {};
For( i = 1, i<= N Cols(dt), i++,
If( 포함( 대문자( 컬럼( i ) << get name ), "APPLE" ) > 0,
insert into(delList, column(i)< )
);
dt << 열 삭제( delList);
// 데이터를 반복하고 다음이 있는 행을 삭제합니다.
// 모든 열의 값 -9999
For( i = 1, i <= N Cols( dt ), i++,
If( Column( dt, i ) << get datatype == "숫자",
dt << 선택 여기서( As Column( dt, i ) == -9999 ),
dt << select where( Contains( As Column( dt, i ), "-9999" ) == 1 |
포함( As Column( dt, i ), "99" ) == 1
)
);
If( N Rows( dt << 선택한 행 가져오기 ) > 0,
dt << 행 삭제
);
);
짐,
코드가 작동합니다.
"|"를 사용할 때 파이프. 추가 열을 생성합니다.
이 경우 추가 열 머리글을 원하지 않으며 총 "12" 열이 됩니다.
그러나 각 열에는 여러 파이프 데이터가 있을 수 있습니다. 나는 첫 번째 값만 신경 쓰고 나머지는 무시합니다.
예시:
"99|23|abc|x", "99"만 신경쓰고 나머지는 무시합니다.
"-9999|123", "-9999"에만 관심이 있고 해당 행은 나중에 삭제됩니다.
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 -9999|999|231 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1|xyz|abc 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 -9999 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 99|23|abc|x 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
-9999|123 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1|87 1 -9999 2 30 40 1 10 99
다음은 원하는 작업을 수행하는 스크립트입니다.스크립트에 대한 몇 가지 사항:
1. Open() 함수는 "|" "," 외에 구분 기호로 추가되었습니다.이것은 .csv 파일을 열 때 "데이터 미리 보기"를 사용하여 쉽게 만들었습니다.구분 기호로 사용할 추가 문자를 선택할 수 있습니다.그런 다음 파일을 연 다음 테이블 패널의 소스 항목으로 이동하여 편집하고 파일을 열기 위해 JMP가 만든 소스 코드를 복사하기만 하면 됩니다.
2. Apple이 포함된 열의 삭제는 일반화되어야 했습니다. 한 열에서는 철자가 Apple이고 다른 열에서는 철자가 apple이었기 때문입니다.
3. -9999의 발생을 찾은 것을 기반으로 완전한 행을 삭제해야 한다고 생각하지 않습니다.값 -9999를 누락된 값으로 설정해야 한다고 생각합니다.원하는 경우 데이터를 그런 식으로 처리할 수 있는 코드를 포함했습니다.
names default to Here(1);
dt=Open(
"file.csv",
columns(
New Column( "a", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "b", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "c", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "d", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "e", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "g", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "apple", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "orange", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "candy", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "pizza", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Apple2_2", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "orange2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( "|" ), CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
// Create a list to place columns to be deleted into
delList = {};
For( i = 1, i<= N Cols(dt), i++,
If( Contains( Uppercase( as Column( i ) << get name ), "APPLE" ) > 0,
insert into(delList, column(i)<<GET name=""> 0,
dt << delete rows
);
)
);
/*// Substitute the code below for the last For Loop in the above
// script, if what you want to do is to just change the -9999
// values to missing values
For( i = 1, i <= N Cols( dt ), i++,
If( Column( dt, i ) << get datatype == "Numeric",
dt << select where( As Column( dt, i ) == -9999 );
If( N Rows(dt << get selected rows) > 0,
column(dt,i)[dt << get selected rows] = .;
);
)
);*/</GET>