본문 바로가기
R/Data Type

R 데이터프레임 DataFrame - 인덱싱/관련함수

by 통계열등생 2020. 10. 26.
반응형

 ◎ 데이터프레임 인덱싱(indexing)

 

> number = 1:10  
> score = c(90,85,83,75,63,55,97,80,77,59)  
> gender = c('M','F','M','M','F','M','M','F','F','M')  
> student = data.frame(number, score, gender)
> print(student)
   number score gender
1       1    90      M
2       2    85      F
3       3    83      M
4       4    75      M
5       5    63      F
6       6    55      M
7       7    97      M
8       8    80      F
9       9    77      F
10     10    59      M
> cat(student)
Error in cat(student) : 
  타입 'list'인 인자 1는 'cat'에 의하여 다루어 질 수 없습니다

벡터 3개를 이용해 데이터프레임을 만들었다.

칼럼의 이름을 지정해주지 않으면 각 벡터의 이름이 칼럼이름으로 들어간 것을 알 수 있다.

리스트와 마찬가지로 데이터프레임도 cat()함수로 출력할 수 없다.

 

 

  • 달러사인 $
> student$score
 [1] 90 85 83 75 63 55 97 80 77 59
> max(student$score)
[1] 97

달러사인 뒤에 칼럼이름을 써서 해당 데이터에 접근할 수 있다.

달러사인을 사용하면 반환되는 출력 자료형은 벡터이다.

 

 

  • 객체[행,칼럼]
> student[,1]
 [1]  1  2  3  4  5  6  7  8  9 10
> student[[1]] 
 [1]  1  2  3  4  5  6  7  8  9 10
> student[1]
   number
1       1
2       2
3       3
4       4
5       5
6       6
7       7
8       8
9       9
10     10
> student['number']
   number
1       1
2       2
3       3
4       4
5       5
6       6
7       7
8       8
9       9
10     10
> student[c(T,F,F)]
   number
1       1
2       2
3       3
4       4
5       5
6       6
7       7
8       8
9       9
10     10

5개의 코드 모두 첫번째 칼럼의 데이터에 접근하는 방법이다.

객체[,1] 과 객체[[1]]은 달러사인과 같이 벡터 자료형을 출력한다.

객체[1] 과 객체['칼럼이름']은 데이터프레임 자료형을 출력한다.

TRUE or FALSE 로 칼럼을 검색할 수도 있다.

 

> student[,1,drop=F]
   number
1       1
2       2
3       3
4       4
5       5
6       6
7       7
8       8
9       9
10     10

결과가 벡터로 반환되는 것이 싫다면 drop=FALSE 옵션을 추가해주면 된다.

 

> student[2,]
  number score gender
2      2    85      F
> student[c(2,3,4),]
  number score gender
2      2    85      F
3      3    83      M
4      4    75      M
> student[2:4,]
  number score gender
2      2    85      F
3      3    83      M
4      4    75      M

행을 검색할 때는 콤마를 꼭 써주고, 콤마 앞부분에 검색하고 싶은 행 인덱스 or 행 이름을 넣으면 된다.

 

> student[2,2]
[1] 85
> student[2:3,2:3]
  score gender
2    85      F
3    83      M

데이터프레임의 원소 하나만 검색하면 벡터를 반환하고,

행을 검색하거나 원소를 두개 이상 검색하면 데이터프레임을 반환한다.

 

 

  • 값 추가
> nrow(student)
[1] 10
> student$english = LETTERS[1:nrow(student)]
> student
   number score gender english
1       1    90      M       A
2       2    85      F       B
3       3    83      M       C
4       4    75      M       D
5       5    63      F       E
6       6    55      M       F
7       7    97      M       G
8       8    80      F       H
9       9    77      F       I
10     10    59      M       J

nrow() 함수는 객체의 행의 갯수를 반환해준다.

이 함수를 영어대문자를 저장하고 있는 내장형 함수 LETTERS의 인덱스로 활용하면 기존 데이터프레임 행의 길이만큼 데이터를 자를 수 있고, 새로운 칼럼을 만들어 값을 추가할 수 있다.

 

※ 내장형 함수의 종류는 'R 스칼라 Scalar' 글에 업로드 되어있다.

small22.tistory.com/6

 

R 스칼라 Scalar

스칼라(scalar)란 단일 차원(0차원)의 값을 갖는 데이터 타입이다. R에서의 기본 데이터 타입은 벡터(vector)임으로 스칼라는 다른 의미로 데이터 길이가 1인 벡터이다. R에서 데이터 타입별 차원을

small22.tistory.com

 

 

  • 값 제외
> student[-4]  
   number score gender
1       1    90      M
2       2    85      F
3       3    83      M
4       4    75      M
5       5    63      F
6       6    55      M
7       7    97      M
8       8    80      F
9       9    77      F
10     10    59      M
> student[-c(4:10),]  
  number score gender english
1      1    90      M       A
2      2    85      F       B
3      3    83      M       C

 

 

  • 값 치환
> length(student)
[1] 4
> length(student$english)
[1] 10
> student$english = letters[1:length(student$english)]
> student
   number score gender english
1       1    90      M       a
2       2    85      F       b
3       3    83      M       c
4       4    75      M       d
5       5    63      F       e
6       6    55      M       f
7       7    97      M       g
8       8    80      F       h
9       9    77      F       i
10     10    59      M       j

length() 함수는 데이터의 길이를 반환한다. 데이터프레임 객체는 넣으면 칼럼의 갯수를 반환하기 때문에 달러사인으로 칼럼하나를 불러오면 nrow() 함수와 마찬가지로 행의 갯수가 반환된다.

이번엔 영어소문자를 저장하고 있는 내장형함수 letters를 이용해 값을 치환하였다.

 

 

  • 조건식
> student[student$score>80,]
  number score gender english
1      1    90      M       a
2      2    85      F       b
3      3    83      M       c
7      7    97      M       g
> student$score[student$score > 80]
[1] 90 85 83 97

 

 

  • %in%
> student[student$english %in% c('a','b'),]
  number score gender english
1      1    90      M       a
2      2    85      F       b

 

 

 

 ◎ 데이터프레임 관련 함수

 

  • head()
> head(student) 
  number score gender english
1      1    90      M       a
2      2    85      F       b
3      3    83      M       c
4      4    75      M       d
5      5    63      F       e
6      6    55      M       f
> head(student, 3) 
  number score gender english
1      1    90      M       a
2      2    85      F       b
3      3    83      M       c

head() 함수는 기본적으로 위에서부터 6개의 행을 출력하고, 객체뒤에 출력할 행의 객수를 지정해 줄 수 있다.

이는 tail() 함수도 동일하다.

 

 

  • tail()
> tail(student) 
   number score gender english
5       5    63      F       e
6       6    55      M       f
7       7    97      M       g
8       8    80      F       h
9       9    77      F       i
10     10    59      M       j
> tail(student, 2) 
   number score gender english
9       9    77      F       i
10     10    59      M       j

 

 

  • str()
> student = student[-4]  # english 칼럼 제거
> str(student)
'data.frame':	10 obs. of  3 variables:
 $ number: int  1 2 3 4 5 6 7 8 9 10
 $ score : num  90 85 83 75 63 55 97 80 77 59
 $ gender: chr  "M" "F" "M" "M" ...
>
> student = data.frame(number, score, gender, stringsAsFactors=T)
> str(student) 
'data.frame':	10 obs. of  3 variables:
 $ number: int  1 2 3 4 5 6 7 8 9 10
 $ score : num  90 85 83 75 63 55 97 80 77 59
 $ gender: Factor w/ 2 levels "F","M": 2 1 2 2 1 2 2 1 1 2

str() 함수는 객체의 구조(structure)를 출력한다.

stringsAsFactors=TRUE 를 지정해주면 문자형 칼럼이 요인형(Factor)으로 바뀌어진다.

반대로 FALSE 를 지정해주면 요인형 칼럼이 문자형으로 바뀐다.

 

 

  • rownames(), colnames(), names()
> rownames(student)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
> colnames(student)
[1] "number" "score"  "gender"
> names(student)
[1] "number" "score"  "gender"

colnames() 함수와 names() 함수는 결과가 같다.

 

> rownames(student) = letters[1:10]
> student
  number score gender
a      1    90      M
b      2    85      F
c      3    83      M
d      4    75      M
e      5    63      F
f      6    55      M
g      7    97      M
h      8    80      F
i      9    77      F
j     10    59      M

 

 

  • rbind(), cbind()
> A = student[1:5,]; A
  number score gender
a      1    90      M
b      2    85      F
c      3    83      M
d      4    75      M
e      5    63      F
> B = student[6:10,]; B
  number score gender
f      6    55      M
g      7    97      M
h      8    80      F
i      9    77      F
j     10    59      M
> rbind(A,B)
  number score gender
a      1    90      M
b      2    85      F
c      3    83      M
d      4    75      M
e      5    63      F
f      6    55      M
g      7    97      M
h      8    80      F
i      9    77      F
j     10    59      M

cbind() 함수도 행의 길이가 동일하다면 위와 같은 방법으로 하나의 데이터프레임을 만들 수 있다.

 

 

※ R 데이터프레임 DataFrame 이전내용

small22.tistory.com/13

 

R 데이터프레임 DataFrame - 생성과 저장 text/csv/excel파일

데이터 프레임은 데이터를 엑셀(Excel)처럼 표의 형태로 저장하는 자료구조이다. 칼럼(열) 단위로 서로 다른 자료형을 갖는 데이터를 저장할 수 있고, R에서 가장 중요한 데이터 타입이다.  ◎ 데

small22.tistory.com

 

 

 

 

 

<R 데이터프레임 DataFrame - 인덱싱/관련함수>

반응형

댓글