HOWTO · R

R에서 행 번호 찾기

이 튜토리얼은 R에서 값의 행 번호를 찾는 방법을 보여줍니다.

이 페이지의 내용

조건을 만족하는 모든 행의 위치를 찾으려면 which()를, 요청한 각 값의 첫 번째 위치를 찾으려면 match()를 사용하세요. 예를 들어 which(staff$role == "Senior Dev")는 staff에서 조건에 맞는 각 행의 위치를 반환합니다. 조건을 만족하는 행이 없으면 which()는 integer(0)을 반환하고, match()는 조회 값이 없으면 NA를 반환합니다.

논리식이나 조회 벡터가 데이터 프레임의 행 순서를 따를 때 이 위치는 행 번호에 해당합니다. 일반적인 R 데이터 프레임에서 행 위치는 1부터 시작합니다. 행 번호가 아니라 행 레이블이 필요하다면 rownames(data)를 비교하거나 match()로 찾으세요.

which()로 행 번호 찾기

which()는 논리 벡터를 받아 값이 TRUE인 위치를 반환합니다. 데이터 프레임 열을 비교하면 논리 벡터가 만들어지므로, 반환된 위치는 데이터 프레임과 같은 순서의 행을 가리킵니다. 일치하는 항목을 모두 반환하므로 여러 행을 선택할 수 있는 조건에 적합합니다.

다음 예제를 실행해 보세요.

staff <- data.frame(
  name = c("Ari", "Bea", "Chen", "Devi"),
  role = c("Analyst", "Senior Dev", "Senior Dev", "Manager")
)
which(staff$role == "Senior Dev")

두 행 모두 해당 역할을 가지므로 결과에는 위치 2와 3이 포함됩니다. 숫자 조건이나 여러 조건을 결합해 행을 찾으려면 논리식을 바꾸면 됩니다. 예를 들어 which(grades$Math > 80)은 Math 값이 80보다 큰 모든 행을 선택합니다. 나중에 이 위치로 다른 객체의 일부를 추출할 계획이라면 데이터 프레임의 행 순서를 고려하세요.

사용자 지정 행 이름으로 찾으려면 rownames()가 반환하는 레이블을 비교하세요.

people <- data.frame(name = c("Ari", "Bea", "Chen"))
rownames(people) <- c("north", "central", "south")
which(rownames(people) == "central")

이 코드는 레이블이 central인 행의 위치를 반환합니다. 레이블 자체는 행 번호가 아닙니다. 행과 일대일로 대응하는 벡터가 이미 있다면 which(values == target)도 같은 방식으로 작동합니다. 독립된 벡터에서는 결과를 위치라고 부르세요. 해당 벡터가 데이터 프레임의 행을 나타내는 경우에만 행 번호라고 할 수 있습니다.

비교 결과에 결측값이 포함되면 which()는 그 위치를 반환하지 않습니다. 결측 여부 자체를 조건으로 처리해야 한다면 which()를 호출하기 전에 논리식에서 결측값을 명시적으로 다루세요.

match()로 값의 첫 위치 찾기

벡터, 열 또는 행 이름 벡터에서 값이 처음 나타나는 위치를 찾으려면 match(query, table)을 사용하세요. query에는 값 하나나 여러 개를 넣을 수 있으며, 결과에는 조회 값마다 위치 하나가 반환됩니다. which()와 달리 match()는 조회 값마다 첫 번째 일치 항목만 반환합니다. 기본 설정에서는 table에 없는 조회 값에 NA가 반환됩니다.

데이터 프레임 열을 조회할 때는 찾을 값을 먼저, 열을 다음에 지정하세요.

staff <- data.frame(
  role = c("Analyst", "Senior Dev", "Senior Dev", "Manager")
)
match("Senior Dev", staff$role)

값이 뒤에서 다시 나타나더라도 반환되는 위치는 첫 번째 일치 행인 2입니다. 벡터에도 같은 형식을 사용할 수 있습니다. match(78, grades)는 78이 처음 나타나는 위치를 찾습니다. 행 레이블의 위치를 얻으려면 match("central", rownames(people))을 사용하세요.

여러 값을 조회하려면 벡터로 전달해 각각의 위치를 얻으세요.

grades <- c(88, 90, 75, 94, 80)
match(c(75, 94, 70), grades)

결과에는 75와 94의 위치가 나오고, 그다음 70에 대해서는 NA가 나옵니다. 위치는 테이블 순서가 아니라 조회 값의 순서를 따릅니다. 테이블에 중복 값이 있어도 각 조회 값은 첫 번째 일치 항목에 대응합니다. 조회 값이 없을 때는 그 위치를 사용해 다른 객체의 일부를 추출하기 전에 NA인지 확인하세요.

결론

조건에 맞는 행이 여러 개일 수 있고 모든 위치가 필요하다면 which()를 선택하세요. 일치하는 항목이 없으면 integer(0)을 반환합니다. 조회할 값이 하나 이상이고 각 값의 첫 위치가 필요하다면 match()를 선택하세요. 값이 없으면 NA를 반환합니다. 두 함수 모두 검색 대상 벡터의 행 순서가 데이터 프레임과 같을 때만 반환 위치가 데이터 프레임의 행에 대응합니다. 위치가 아니라 행 레이블이 필요하면 rownames()를 사용하세요.