전 거기에 있었으므로 당신이 겪고있는 일이 어떤 것인지 알 수 있습니다.
나는 당신에게 2 개의 뉴스를 가지고있다. 하나는 나쁜 것이고, 하나는 좋은 것이다. 나쁜 점은 SAS의 이러한 유형의 파일을 수천 번 읽었지만 결코 R이 아니란 것입니다. 그러나 좋은 소식은 제가 R에서 작업 할 수 있도록 몇 가지 팁을 줄 수 있다는 것입니다.
전략은 다음과 같습니다 :
1) 단일 열만 포함하는 데이터 프레임으로 파일을 읽어야합니다. 이 열은 문자이며 입력 파일의 전체 줄을 보유합니다. 즉 파일의 최대 줄이 80 인 경우 길이는 80입니다.
2) 이제 모든 레코드가 입력 파일의 한 줄과 같은 데이터 프레임이 있습니다. 이 시점에서 데이터 프레임의 번호가 파일의 행당 개수와 같거나 같은지 확인할 수 있습니다.
3) 이제 grep
을 사용하여 기준을 충족하는 라인 (예 : '고객'으로 시작하는 부제) 만 제거하거나 유지할 수 있습니다. 여기에서 정규 표현식이 정말 유용 할 수 있습니다.
4) dataframe는 이제 (즉 라인이 'Country'
또는 /\d{3} \d{8}/
또는 ' Total'
로 시작하는 '고객'패턴과 테이블 패턴)과 일치하는 기록이있다.
5) '고객'을 찾을 때마다 +1을 증가시키는 그룹 변수를 만드는 것이 필요합니다. 따라서 group = 1은 group이 group = 2 인 'Customer 010343'을 찾을 때까지 동일한 값을 반복합니다. 또는 새로운 ID가 발견 될 때까지 그룹이 고객 ID가 될 수 있습니다. 새로운 ID가 발견 될 때까지 ID를 유지해야합니다.
마지막 단계부터 고객과 테이블을 쉽게 식별 할 수 있으므로 많은 도움이됩니다. 테이블 문자열을 표 형식으로 출력하는 함수를 만들 수 있습니다.
단일 테이블에서 처리하거나 n 데이터 프레임에서 분할하여 개별적으로 처리할지 여부는 사용자가 결정합니다.
SAS에는 기준과 일치하는 각 줄을 다른 기준과 다르게 처리 할 수있는 포인터 (@) 및 보존 (보관 문) 개념이 있으므로 출력 데이터 집합에 이미 열과 고객 정보가 표 형식으로 포함되어 있습니다.
도움이되기를 바랍니다.
이 파일은 고정 폭 파일이므로'read.fwf()'를 사용하면 더 편리 할 것입니다. – Andrie
'read.fwf'가 어떤 표준 방법에 대해서도 전혀 도움이되지 않을 것이라고 생각합니다. – Altons