데이터 테이블 분할 문제<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />데이터 테이블 분할에 문제가 있는데 누군가가 그 방법을 알고 있는지 궁금합니다. 내 데이터는 다음과 같습니다.

데이터는 다음으로 분할되어야 합니다. ID2 ~와 함께 ID 그룹 변수가 됩니다. 그렇게 했을 때 나는 다음과 같은 결과를 얻었습니다.

문제는 ID s 2와 4에는 열에 C 값이 여러 개 있습니다. ID2 . JMP는 항상 분할된 데이터 테이블의 마지막 값을 사용하는 것 같습니다.
다음과 같은 테이블이 되도록 자동으로 수행할 수 있는 방법이 있습니까?

여기에는 원본 데이터의 다양한 C 값을 나타내는 ID 2와 4에 대한 두 개의 행이 있습니다.
당신의 도움을 주셔서 감사합니다!
세바스찬
Re: 데이터 테이블 분할 문제감사해요 msharp ,
그것은 잘 작동합니다.
그리고 당신은 글을 쓰고 있습니다. 일을 단순하게 유지하는 것이 아마도 가장 좋은 방법일 것입니다.
Re: 데이터 테이블 분할 문제나는 일반적으로 이 접근 방식을 멀리하고 싶습니다. 정적 데이터는 일반적으로 동적 데이터보다 안전합니다. 데이터의 순서가 얼마나 중요한지 자문해 보세요.이 솔루션은 키를 순서대로 유지하지만 값은 자유롭게 로밍됩니다.하지만...
해당 솔루션은 숫자 열에서만 작동합니다.:ID2를 :ID2Num으로 바꾸려면 A는 1이고 B는 2입니다. 간단히 & 문을 사용할 수 있으므로 수식에 :Sum( :ID[Index( 1, Row() )] == :ID & :ID2Num[Index( 1, Row() )] == :ID2Num ) 을 사용할 수 있습니다.
문자 열이 있으면 좀 더 창의적이어야 합니다.따라서 공식은 다음과 같습니다.
length(concat items(:ID2[Index( 1, Row() )],"")) - length(substitute(concat items(:ID2[Index( 1, Row() )],""), :ID2, ""))
또는
dt1 << New Column("Concat", 문자, 명목, 공식(:ID2 || char(:ID)));
dt1 << New Column("반복", 문자, 명목, 공식((length(concat items(:Concat[Index( 1, Row() )],"")) - length(substitute(concat items(:Concat[ Index( 1, Row() )],""), :Concat,"")))/2)); //끝에 있는 2는 연결된 문자열의 길이를 나타냅니다.
여기서는 많은 일이 일어나고 있는데 지금은 그것을 설명할 에너지가 없습니다.하지만 궁금한 점이 있으면 알려주세요. 실제로 위에 더 실행 가능하고 간단한 솔루션이 있습니다.
Re: 데이터 테이블 분할 문제감사해요 msharp ,
그건 그렇고, 이전 게시물에서 @MS는 인덱싱을 위해 다음 공식을 제공했습니다. :Sum( :ID[Index( 1, Row() )] == :ID ) @ms 인덱싱을 위해 다음 공식을 제공했습니다. :Sum( :ID[Index( 1, Row() )] == :ID )
Re: 구문: ID로 인덱스 열을 어떻게 생성합니까?
이 맥락에서 사용할 수 있는 방법이 있나요? 두 개의 인덱스 열이 있고 그 중 하나가 알파벳입니까?
최상의,
론
Re: 데이터 테이블 분할 문제언급된 내용을 결합/요약합니다. 데이터를 미리 정렬해야 합니다. 그렇지 않으면 Lag() 함수에 문제가 발생합니다.또한 각 row() 명령에 대해 수식을 사용하는 것보다 빠릅니다.나중에 lag() 함수에 영향을 줄 수 있는 사후 정렬이 걱정된다면 수식을 삭제하여 충돌을 피하세요.따라서:
이름DefaultTo여기 ( 1 ) ;
// 테이블
dt1 = 새 테이블 ( "세바스찬" ,
새 열 ( "ID" ,
숫자 ,
"명사 같은" ,
체재 ( "최상의" , 12 ) ,
값 설정 ( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 삼 , 삼 , 삼 , 삼 , 4 , 4 , 4 , 4 , 2 , 2 ] )
) ,
새 열 ( "ID2" ,
성격 ,
"명사 같은" ,
값 설정 (
{ "ㅏ" , "비" , "씨" , "디" , "ㅏ" , "비" , "씨" , "씨" , "ㅏ" , "비" , "씨" , "디" , "ㅏ" , "비" ,
"씨" , "씨" , "씨" , "비" }
)
) ,
새 열 ( "값" ,
숫자 ,
"명사 같은" ,
체재 ( "최상의" , 12 ) ,
값 설정 (
[ 111 , 222 , 333 , 444 , 111 , 222 , 333 , 555 , 111 , 222 , 555 , 444 , 111 , 222 ,
555 , 666 , 777 , 888 ]
)
)
) ;
// 다음 단계에서 수식이 작동하려면 테이블을 정렬해야 합니다.
dt1 << 종류 ( 테이블 교체 ,
에 의해 ( : ID , : ID2 ) ,
주문하다 ( 오름차순 , 오름차순 )
) ;
// 보조 열 추가
dt1 << 새 열 ( "반복하다" ,
숫자 ,
"명사 같은" ,
체재 ( "최상의" , 12 ) ,
공식 ( 만약에 ( : ID2 != 지연 ( : ID2 , 1 ) | 열 () == 1 , 1 , 지연 ( : 반복하다 , 1 ) + 1 ) )
) ;
: 반복하다 << 수식 삭제 ; // '각 행에 대해()'보다 빠릅니다.
// 나뉘다
dt2 = dt1 << 나뉘다 (
분할 기준 ( : ID2 ) ,
나뉘다 ( : 값 ) ,
그룹 ( : ID , : 반복하다 )
) ;
// 삭제 보조자 열
dt2 << deleteColumn ( : 반복하다 ) ;
Re: 데이터 테이블 분할 문제안녕 세바스티안 호프 마이스터 ,
이 시도:
dt = 새 테이블 ( "원본 데이터" ,
행 추가 ( 16 ) ,
새 열 ( "ID" ,
숫자 ,
마디 없는 ,
체재 ( "최상의" , 12 ) ,
값 설정 ( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 삼 , 삼 , 삼 , 삼 , 4 , 4 , 4 , 4 ] )
) ,
새 열 ( "ID2" ,
성격 ,
명사 같은 ,
값 설정 (
{ "ㅏ" , "비" , "씨" , "디" , "ㅏ" , "비" , "씨" , "씨" , "ㅏ" , "비" , "씨" , "디" , "ㅏ" , "비" ,
"씨" , "씨" }
)
) ,
새 열 ( "값" ,
숫자 ,
마디 없는 ,
체재 ( "최상의" , 12 ) ,
값 설정 (
[ 111 , 222 , 333 , 444 , 111 , 222 , 333 , 555 , 111 , 222 , 555 , 444 , 111 , 222 ,
555 , 666 ]
)
)
) ;
// 다음 단계에서 수식이 작동하려면 테이블을 정렬해야 합니다.
dt << 종류 ( 테이블 교체 ,
에 의해 ( : ID , : ID2 ) ,
주문하다 ( 오름차순 , 오름차순 )
) ;
// 중복을 인식할 새 인덱스를 도입합니다.
dt << 새 열 ( "ID3" ) ;
각 행마다 ( 만약에 ( // 나중에 변경될 수 있는 정렬에 따라 달라지므로 열에 수식을 사용하지 마세요.
열 () == 1 , ID3 =: ID ,
: ID != 지연 ( : ID , 1 ) | : ID2 != 지연 ( : ID2 , 1 ) , ID3 = : ID ,
ID3 = 지연 ( : ID3 , 1 ) + 1
)) ;
// 이제 테이블을 분할할 수 있습니다.
dt정렬됨 = dt << 나뉘다 (
분할 기준 ( : ID2 ) ,
나뉘다 ( : 값 ) ,
그룹 ( : ID3 , : ID ) ,
출력 테이블 ( "분할 테이블" )
) ;
최상의,
론
Re: 데이터 테이블 분할 문제이런! 미안해요, 그렇죠 세바스찬. 어쩌면 같은 것일까요?
// 보조 열 추가
기다리다 ( 삼 ) ;
dt1 << 새 열 ( "반복하다" ,
숫자 ,
"명사 같은" ,
체재 ( "최상의" , 12 ) ,
공식 ( 만약에 ( : ID2 != 지연 ( : ID2 , 1 ) | 열 () == 1 , 1 , 지연 ( : 반복하다 , 1 ) + 1 ) )
) ;
Re: 데이터 테이블 분할 문제지원해 주셔서 감사합니다!
그것이 내가 하고 있던 일이었습니다. 물론 실제 세계의 문제는 데이터 세트에 ~3,000개의 행이 있고 수동이 아닌 자동으로 반복 열을 생성하는 공식을 상상할 수 없다는 것입니다.
이에 대한 해결책도 알고 계시나요? "반복" 열을 생성하기 위해 여러 for 루프를 중첩하는 스크립트를 작성하는 것을 피하고 싶습니다. 너무 비효율적으로 들리네요.
감사해요,
세바스찬
Re: 데이터 테이블 분할 문제내 생각엔 보조 기둥이 필요한 것 같아, 세바스찬.
이름DefaultTo여기 ( 1 ) ;
// 테이블
dt1 = 새 테이블 ( "세바스찬" ,
행 추가 ( 16 ) ,
새 열 ( "ID" ,
숫자 ,
"명사 같은" ,
체재 ( "최상의" , 12 ) ,
값 설정 ( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 삼 , 삼 , 삼 , 삼 , 4 , 4 , 4 , 4 ] )
) ,
새 열 ( "ID2" ,
성격 ,
"명사 같은" ,
값 설정 (
{ "ㅏ" , "비" , "씨" , "디" , "ㅏ" , "비" , "씨" , "씨" , "ㅏ" , "비" , "씨" , "디" , "ㅏ" , "비" ,
"씨" , "씨" }
)
) ,
새 열 ( "값" ,
숫자 ,
"명사 같은" ,
체재 ( "최상의" , 12 ) ,
값 설정 (
[ 111 , 222 , 333 , 444 , 111 , 222 , 333 , 555 , 111 , 222 , 555 , 444 , 111 , 222 ,
555 , 666 ]
)
)
) ;
// 보조 열 추가
기다리다 ( 삼 ) ;
dt1 << 새 열 ( "반복하다" ,
숫자 ,
"명사 같은" ,
체재 ( "최상의" , 12 ) ,
값 설정 ( [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 ] )
) ;
// 나뉘다
dt2 = dt1 << 나뉘다 (
분할 기준 ( : ID2 ) ,
나뉘다 ( : 값 ) ,
그룹 ( : ID , : 반복하다 )
) ;
// 보조 열 삭제
기다리다 ( 삼 ) ;
dt2 << deleteColumn ( : 반복하다 ) ;