테이블에 행 추가나 삭제하기
R2026b이 예제에서는 테이블에서 행을 추가하거나 삭제하는 방법을 보여줍니다. 맨 아래에 행을 추가하거나 중간에 행을 삽입하거나 두 테이블을 결합할 수 있습니다. 테이블에 공간을 사전할당하는 경우 행을 대체하여 데이터로 채울 수 있습니다. 중복된 행이나 누락값이 있는 행을 포함하여 번호, 이름 또는 조건을 기준으로 행을 삭제할 수 있습니다. 간단한 경우에는 Variables Editor를 사용하여 테이블을 대화형 방식으로 수정할 수 있습니다.
샘플 테이블 만들기
먼저, readtable 함수를 사용하여 쉼표로 구분된 값(CSV) 파일에서 테이블을 만듭니다. 샘플 파일에는 소수의 환자에 대한 시뮬레이션된 데이터가 들어 있습니다. 3번째 행에는 누락값이 있으며 이는 해당 환자에 대한 데이터가 불완전함을 나타냅니다.
patientSample1 = readtable("patientSample1.csv",TextType="string")
patientSample1 = 5×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Brown" 49 64 119 0 "Good"
"Martinez" 37 70 179 0 "Good"
"Chen" 55 NaN NaN 1 <missing>
"Wright" 45 70 126 1 "Excellent"
"Kim" 41 65 127 0 "Poor"
테이블 끝에 행 추가하기
테이블 끝에 하나의 행을 추가하려면 행이 한 개 있는 테이블을 사용하거나 행이 한 개 있는 셀형 배열을 사용합니다. 새 행을 기존 행 인덱스의 경계 외부에 배치하여 추가합니다.
편의를 위해, 새 행에 대한 값이 포함된 셀형 배열을 사용합니다. 각 테이블 변수에 대해 호환되는 데이터형의 값을 포함합니다.
oneRowCellArray = {"Lee" 55 73 167 false "Fair"}oneRowCellArray = 1×6 cell array
{["Lee"]} {[55]} {[73]} {[167]} {[0]} {["Fair"]}
테이블의 맨 아래에 행을 추가하려면 end+1을 행 인덱스로 지정합니다. 일반적으로 end 키워드는 배열의 마지막 요소를 지정합니다. 배열 또는 테이블의 행 인덱스를 지정하는 데 사용되는 경우 end는 마지막 행을 지정합니다. 다음 대입식은 셀형 배열에서 값을 추출하여 patientSample1의 새 행에 할당합니다.
patientSample1(end+1,:) = oneRowCellArray
patientSample1 = 6×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Brown" 49 64 119 0 "Good"
"Martinez" 37 70 179 0 "Good"
"Chen" 55 NaN NaN 1 <missing>
"Wright" 45 70 126 1 "Excellent"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
마찬가지로, 새 테이블을 만들거나 기존 테이블의 행 하나를 지정하여 행이 한 개 있는 테이블을 사용할 수 있습니다.
행이 한 개 있는 테이블을 만듭니다.
oneRowTable = table("Griffin",49,70,186,false,"Fair")
oneRowTable = 1×6 table
Var1 Var2 Var3 Var4 Var5 Var6
_________ ____ ____ ____ _____ ______
"Griffin" 49 70 186 false "Fair"
다음 구문을 사용하여 행을 할당할 경우 patientSample1과 oneRowTable의 변수 이름이 다를 수 있습니다. 이 구문에서 대입식은 oneRowTable에서 값을 추출하여 patientSample1의 새 행에 할당합니다.
patientSample1(end+1,:) = oneRowTable
patientSample1 = 7×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Brown" 49 64 119 0 "Good"
"Martinez" 37 70 179 0 "Good"
"Chen" 55 NaN NaN 1 <missing>
"Wright" 45 70 126 1 "Excellent"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
"Griffin" 49 70 186 0 "Fair"
기존 행 바꾸기
이미 존재하는 행에 값을 할당할 수도 있습니다. 할당 연산을 수행하면 행을 덮어쓰게 됩니다.
예를 들어, patientSample1의 두 번째 행에 oneRowCellArray를 할당합니다. 이렇게 할당하면 환자 Martinez의 데이터가 환자 Lee의 데이터로 덮어쓰입니다.
patientSample1(2,:) = oneRowCellArray
patientSample1 = 7×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
_________ ___ ______ ______ ______ ________________________
"Brown" 49 64 119 0 "Good"
"Lee" 55 73 167 0 "Fair"
"Chen" 55 NaN NaN 1 <missing>
"Wright" 45 70 126 1 "Excellent"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
"Griffin" 49 70 186 0 "Fair"
특정 위치에 행 삽입하기
기존 행 사이의 특정 위치에 행을 삽입하려면 테이블을 두 개로 나누고 세로 결합을 사용합니다. 예를 들어, 테이블의 3번째 행과 4번째 행 사이에 oneRowCellArray를 삽입해 보겠습니다.
patientSample1 = [patientSample1(1:3,:); oneRowCellArray; patientSample1(4:end,:)]
patientSample1 = 8×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
_________ ___ ______ ______ ______ ________________________
"Brown" 49 64 119 0 "Good"
"Lee" 55 73 167 0 "Fair"
"Chen" 55 NaN NaN 1 <missing>
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
"Griffin" 49 70 186 0 "Fair"
행 추가 및 테이블 정렬하기
행을 삽입하는 또 다른 방법은 테이블 끝에 행을 추가한 다음 sortrows 함수를 사용하여 테이블 순서를 변경하는 것입니다.
예를 들어, 또 다른 환자에 대한 행을 추가해 보겠습니다.
patientSample1(end+1,:) = {"Anderson" 45 68 128 false "Excellent"}patientSample1 = 9×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Brown" 49 64 119 0 "Good"
"Lee" 55 73 167 0 "Fair"
"Chen" 55 NaN NaN 1 <missing>
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
"Griffin" 49 70 186 0 "Fair"
"Anderson" 45 68 128 0 "Excellent"
테이블이 정렬되지 않았거나 새 행을 추가할 때 테이블의 순서가 뒤섞이는 경우 sortrows를 사용하여 테이블을 정렬합니다. 기본적으로 sortrows는 첫 번째 변수의 값을 기준으로 테이블을 오름차순으로 정렬합니다. 이 경우, 정렬 순서는 환자의 성을 기준으로 합니다.
patientSample1 = sortrows(patientSample1)
patientSample1 = 9×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Anderson" 45 68 128 0 "Excellent"
"Brown" 49 64 119 0 "Good"
"Chen" 55 NaN NaN 1 <missing>
"Griffin" 49 70 186 0 "Fair"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
행을 빈 테이블에 추가하기
빈 테이블로 시작하고 여기에 데이터 행을 추가할 수 있습니다. 이 방법은 시간에 따라 데이터를 수집하고 데이터를 테이블 끝에 주기적으로 추가하려는 경우 유용할 수 있습니다.
먼저, 빈 테이블을 만듭니다.
startFromEmpty = table
startFromEmpty = 0×0 empty table
다음으로, 테이블의 마지막 행 뒤에 행 하나를 추가하여 테이블을 확장합니다.
startFromEmpty(end+1,:) = oneRowCellArray
startFromEmpty = 1×6 table
Var1 Var2 Var3 Var4 Var5 Var6
_____ ____ ____ ____ _____ ______
"Lee" 55 73 167 false "Fair"
모든 변수의 이름을 바꾸려면 새 변수 이름으로 구성된 배열을 테이블의 VariableNames 속성에 할당합니다.
varNames = ["LastName" "Age" "Height" "Weight" "Smoker" "SelfAssessedHealthStatus"]; startFromEmpty.Properties.VariableNames = varNames
startFromEmpty = 1×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
________ ___ ______ ______ ______ ________________________
"Lee" 55 73 167 false "Fair"
사전할당된 테이블에 행 할당하기
빈 테이블로 시작하여 행을 한 번에 하나씩 추가할 수도 있지만, 여러 행으로 구성된 테이블을 사전할당하는 것이 더 효율적일 수 있습니다. 그런 다음 데이터를 사용할 수 있게 되는 대로 행을 채우면 됩니다.
테이블을 사전할당하려면 table 함수를 사용합니다. 테이블의 크기, 변수 이름, 변수의 데이터형을 지정합니다. 예를 들어, 6개 행과 9개 변수를 갖는 테이블을 사전할당해 보겠습니다. 사전할당은 데이터형에 적합한 누락값으로 변수를 채웁니다.
varNames = ["LastName" "Age" "Height" "Weight" "Smoker" "SelfAssessedHealthStatus"]; varTypes = ["string" "double" "double" "double" "logical" "string"]; preallocatedTable = table(Size=[4 6],VariableNames=varNames,VariableTypes=varTypes)
preallocatedTable = 4×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
_________ ___ ______ ______ ______ ________________________
<missing> 0 0 0 false <missing>
<missing> 0 0 0 false <missing>
<missing> 0 0 0 false <missing>
<missing> 0 0 0 false <missing>
데이터를 첫 번째 행에 추가합니다. 다음 대입식은 첫 번째 행의 누락값을 덮어씁니다.
preallocatedTable(1,:) = oneRowCellArray
preallocatedTable = 4×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
_________ ___ ______ ______ ______ ________________________
"Lee" 55 73 167 false "Fair"
<missing> 0 0 0 false <missing>
<missing> 0 0 0 false <missing>
<missing> 0 0 0 false <missing>
빈 행 추가하기
R2023b부터 resize 함수를 사용하여 테이블 끝에 더 많은 행을 사전할당할 수 있습니다. 새 행은 누락값으로 채워지며, 이 값은 나중에 업데이트할 수 있습니다.
먼저, height 함수를 사용하여 patientSample1의 행 개수를 확인합니다.
numberOfRows = height(patientSample1)
numberOfRows = 9
다음으로, resize를 사용하여 행을 3개 더 추가합니다. resize의 두 번째 인수는 크기 조정된 테이블의 총 행 개수를 지정합니다.
patientSample1 = resize(patientSample1,numberOfRows+3)
patientSample1 = 12×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Anderson" 45 68 128 0 "Excellent"
"Brown" 49 64 119 0 "Good"
"Chen" 55 NaN NaN 1 <missing>
"Griffin" 49 70 186 0 "Fair"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
두 테이블 결합하기
테이블에 행을 추가하는 또 다른 방법은 다른 테이블을 결합하는 것입니다. 두 개의 테이블을 세로로 결합할 경우 두 테이블의 변수 개수와 변수 이름이 동일해야 합니다. 위쪽 테이블과 아래쪽 테이블에서 일치하는 변수는 서로 호환되는 데이터형과 크기를 가져야 합니다. 그러나 세로 결합에서는 이름을 기준으로 변수를 일치시키므로 두 테이블의 변수 순서는 다를 수 있습니다. 결합된 테이블의 변수는 위쪽 테이블과 순서가 동일합니다.
예를 들어, 또 다른 샘플 CSV 파일에서 두 번째 테이블을 만들어 보겠습니다. 두 번째 테이블은 첫 번째 테이블과 동일한 변수를 가집니다.
patientSample2 = readtable("patientSample2.csv",TextType="string")
patientSample2 = 4×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
___________ ___ ______ ______ ______ ________________________
"Garcia" 27 69 131 1 "Fair"
"Murphy" 36 71 180 0 "Good"
"Takahashi" 29 63 130 0 "Excellent"
"Brown" 49 64 119 0 "Good"
두 테이블을 세로로 결합합니다.
combinedPatients = [patientSample1; patientSample2]
combinedPatients = 16×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
___________ ___ ______ ______ ______ ________________________
"Anderson" 45 68 128 0 "Excellent"
"Brown" 49 64 119 0 "Good"
"Chen" 55 NaN NaN 1 <missing>
"Griffin" 49 70 186 0 "Fair"
"Kim" 41 65 127 0 "Poor"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
"Garcia" 27 69 131 1 "Fair"
"Murphy" 36 71 180 0 "Good"
"Takahashi" 29 63 130 0 "Excellent"
"Brown" 49 64 119 0 "Good"
행 번호를 기준으로 행 삭제
행 번호를 첨자로 사용하고 빈 배열 []을 할당하여 행을 삭제할 수 있습니다.
예를 들어, 테이블에서 행 2와 5를 삭제합니다.
patientSample1([2 5],:) = []
patientSample1 = 10×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Anderson" 45 68 128 0 "Excellent"
"Chen" 55 NaN NaN 1 <missing>
"Griffin" 49 70 186 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
중복된 행 삭제하기
중복된 행을 삭제하여 테이블을 정리할 수도 있습니다.
예를 들어, unique 함수를 사용하여 이름이 Lee인 환자의 중복 행을 삭제해 보겠습니다. 이 함수는 맨 끝에서 누락값으로 채워진 행을 제거하지 않는데, 누락값이 고유한 값으로 간주되기 때문입니다. 누락값은 어떤 값과도 같지 않으며, 자기 자신과도 같지 않습니다.
patientSample1 = unique(patientSample1)
patientSample1 = 8×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Anderson" 45 68 128 0 "Excellent"
"Chen" 55 NaN NaN 1 <missing>
"Griffin" 49 70 186 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
<missing> 0 0 0 0 <missing>
누락값을 가지는 행 삭제하기
테이블에 누락값을 갖는 행이 있으면 rmmissing 함수를 사용하여 해당 행을 삭제할 수 있습니다.
예를 들어, 환자 데이터 테이블에서 누락값이 있는 테이블 행을 삭제해 보겠습니다.
patientSample1 = rmmissing(patientSample1)
patientSample1 = 4×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
__________ ___ ______ ______ ______ ________________________
"Anderson" 45 68 128 0 "Excellent"
"Griffin" 49 70 186 0 "Fair"
"Lee" 55 73 167 0 "Fair"
"Wright" 45 70 126 1 "Excellent"
또는 fillmissing 함수를 사용하여 누락값을 채울 수 있습니다.
조건을 충족하는 행 삭제하기
하나 이상의 변수에서 조건을 충족하는 값이 있는 행을 삭제할 수도 있습니다.
예를 들어, 나이가 45세 이하인 환자에 대한 행을 찾아보겠습니다. <= 연산자를 사용하면 행 첨자로 사용할 수 있는 논리형 벡터가 반환됩니다.
ageLessThanOrEqualTo45 = patientSample1.Age <= 45
ageLessThanOrEqualTo45 = 4×1 logical array
1
0
0
1
Age가 45 이하인 행을 삭제합니다.
patientSample1(ageLessThanOrEqualTo45,:) = []
patientSample1 = 2×6 table
LastName Age Height Weight Smoker SelfAssessedHealthStatus
_________ ___ ______ ______ ______ ________________________
"Griffin" 49 70 186 0 "Fair"
"Lee" 55 73 167 0 "Fair"
행 이름을 기준으로 행 삭제하기
테이블에 행 이름이 있는 경우, 행 이름을 첨자로 사용할 수 있습니다. patientSample1에 대한 행 이름을 지정합니다. 그런 다음 행 이름을 기준으로 행을 삭제합니다.
먼저, 식별자 변수 LastName을 행 이름으로 지정합니다. 그런 다음, 변수 LastName을 patientSample1에서 삭제합니다.
patientSample1.Properties.RowNames = patientSample1.LastName; patientSample1.LastName = []
patientSample1 = 2×5 table
Age Height Weight Smoker SelfAssessedHealthStatus
___ ______ ______ ______ ________________________
Griffin 49 70 186 0 "Fair"
Lee 55 73 167 0 "Fair"
행 이름을 첨자로 사용하고 빈 배열 []을 할당하여 행을 삭제합니다.
patientSample1("Lee",:) = []patientSample1 = 1×5 table
Age Height Weight Smoker SelfAssessedHealthStatus
___ ______ ______ ______ ________________________
Griffin 49 70 186 0 "Fair"