본문 바로가기
R특강/하루만에 끝내는 R 데이터프레임

[하루만에 끝내는 R 데이터프레임] 7. 데이터프레임 행 또는 열 제거, 추가, 변경하기

by 만다린망고 2023. 7. 10.
반응형

이번 시간에는 데이터프레임의 행 또는 열 제거, 추가, 변경하는 방법을 배워봅시다. 

1교시. 강의 소개
2교시. 데이터프레임 정의하고 행이름, 열이름 바꾸기
3교시. 유용한 기본함수 (tail, head, str, dim)
4교시. 벡터의 인덱싱
5교시. 데이터 프레임 원소에 접근하기 (데이터프레임 인덱싱)
6교시. 데이터프레임 행과 열에 접근하기 (데이터프레임 열/행 인덱싱)
7교시. 데이터프레임 행 또는 열 제거, 추가, 변경하기
8교시. 특정 조건으로 데이터프레임 추리기
9교시. 여러 데이터프레임 결합하기
10교시. 엑셀파일을 데이터프레임으로 불러오기

먼저 데이터프레임을 하나 정의하겠습니다. 학생들의 정보를 담고 있는 데이터프레임입니다. 

df <- data.frame(
  name = c("John", "Emma", "Michael", "Sophia"),
  age = c(20, 19, 21, 18),
  grade = c("A", "B", "A", "A+")
)


위 데이터프레임을 이용하여 행 또는 열 제거, 추가, 변경하는 방법을 배워봅시다. 

 

1. 행 제거

1) 한 행 제거

1행을 제거하는 방법은 아래와 같습니다. 

> df[-1,]
     name age grade
2    Emma  19     B
3 Michael  21     A
4  Sophia  18    A+


행의 인덱스 자리에 음수인 인덱스를 넣어주면 됩니다. 

 

2) 여러 행 제거

2,3행을 동시에 제거하는 방법은 아래와 같습니다. 

> df[c(-2,-3),]
    name age grade
1   John  20     A
4 Sophia  18    A+


아래와 같이 슬라이싱을 이용할 수도 있습니다. 

> df[-3:-2,]
    name age grade
1   John  20     A
4 Sophia  18    A+

 

2. 행 추가

행을 추가할 때는 rbind 함수를 이용합니다. list 형태로 행을 추가해야 합니다. 

> rbind(df,list('Paul',23,'B'))
     name age grade
1    John  20     A
2    Emma  19     B
3 Michael  21     A
4  Sophia  18    A+
5    Paul  23     B


만약 리스트가 아닌 벡터 형태로 추가할 경우 문제가 발생할 수 있습니다. 벡터에 문자열이 포함되어 있다면 모든 값이 문자열로 변경됩니다. 숫자가 문자열로 변경되는 것입니다. 리스트를 이용하면 이러한 문제를 해결할 수 있습니다. 

 

3. 행 변경

인덱싱을 이용하여 변경하고 싶은 행에 접근한 뒤, 새로운 값을 리스트 형태로 입력하면 됩니다. 첫째행을 변경해봅시다. 

> df[1,]=list('Jo',35,'B')
> df
     name age grade
1      Jo  35     B
2    Emma  19     B
3 Michael  21     A
4  Sophia  18    A+

 

4. 열 제거

1) 한 열 제거

2열을 제거해보겠습니다. 아래와 같이 두가지 방법이 가능합니다. 

> df[,-2]
     name grade
1      Jo     B
2    Emma     B
3 Michael     A
4  Sophia    A+

 

> df[-2]
     name grade
1      Jo     B
2    Emma     B
3 Michael     A
4  Sophia    A+

 

2) 여러 열 제거

2,3열을 제거해봅시다. 먼저 df[,c(-2,-3)] 를 이용하여 제거해보겠습니다. 

> df[,c(-2,-3)]
[1] "Jo"      "Emma"    "Michael" "Sophia"


결과가 벡터 형태로 출력됩니다. 만약 결과를 데이터프레임 형태로 얻고 싶다면 아래와 같이 하면 됩니다. 

> df[c(-2,-3)]
     name
1      Jo
2    Emma
3 Michael
4  Sophia

 

 

5. 열 추가

원하는 열에 인덱싱으로 접근한 뒤에 바꾸고 싶은 값을 벡터 형태로 입력해주면 됩니다. 열에서는 벡터 형태로 입력해도 괜찮은 이유는 같은 열의 원소들이 동일한 자료형이기 때문입니다. 

성별이라는 열을 하나 추가해봅시다. 

> df['sex']=c('M','F','M',"F")
> df
     name age grade sex
1    John  20     A   M
2    Emma  19     B   F
3 Michael  21     A   M
4  Sophia  18    A+   F

 

6. 열 변경

인덱싱으로 변경하고 싶은 열에 접근한 뒤에 바꾸고 싶은 값을 벡터 형태로 입력해줍니다. 

> df['age']=c(100,100,100,100)
> df
     name age grade sex
1    John 100     A   M
2    Emma 100     B   F
3 Michael 100     A   M
4  Sophia 100    A+   F

 

반응형

댓글