R-Studio 데이터 프레임(DataFrame) 과 Factor

R-Studio의 꽃 데이터 프레임(DataFrame)

Featured image

R-Studio 기본 자료형 Vector

Matrix -> DataFrame 으로 변환 가능하다.
DataFrame 에서 행렬 반전은 Matrix 에서 t(Matrix변수) 를 통해 미리 하고오는게 편하다.

사용된 함수

이름 함수이름 사용법
Getwd getwd() getwd()
Setwd setwd() setwd(‘작업 경로’)
Print print() print(변수)
View View() View(데이터 프레임 변수)
Names
ColNames
names()
colnames()
names(프레임 변수))
colnames(프레임 변수, do.NULL = T)
Row.Names row.names() row.names(프레임 변수)


함수 예제

# 아래 주석은 콘솔 값 입니다.
# csv 로드를 위해 워크스페이스 바꿈
getwd()
setwd('D:/Rwork/bigdata')

# header = 컬럼명 대로 정렬해줌.
abc.csv = read.csv('abc.csv', header = T)
abc.csv
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80    NA    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 6      2   2  60        7   daegu    40     3  3000      1
# 이게 데이터 프레임 구조 이다.

str(abc.csv)
# 'data.frame':	6 obs. of  9 variables:
#  $ gender  : int  1 1 1 1 2 2
#  $ job     : int  1 2 2 3 3 2
#  $ age     : int  10 20 30 40 50 60
#  $ position: int  2 5 4 4 5 7
#  $ address : Factor w/ 3 levels "busan","daegu",..: 3 1 2 1 3 2
#  $ total   : int  50 80 60 70 50 40
#  $ check   : int  5 NA 5 3 3 3
#  $ price   : int  1200 NA 2500 1200 1400 3000
#  $ survey  : int  3 NA 2 5 6 1
# 낯 설다. 그런데 맨 윗줄 만 알면된다. 6행(obs) 9열(variables)
# 아! abc.csv 데이터 프레임은 6행 9열의 구조이구나.
# 젠더 컬럼의 속성 자료형은 int형이구나!
# 중간에 address 속성의 자료형은 Factor 인데 Factor는 레이블이 있는 구조이다.
# 즉, 그룹핑이 가능하다는 이야기이다. 부산의 레벨값은 3이므로 3의 갯수를 카운트 한다면.
# 부산은 몇명 이런식의 나열이 가능하다는 이야기이다.

# 클래스
culAdd <- factor(abc.csv$address, levels = c("seoul", "busan", "daegu"))
culAdd
# [1] seoul busan daegu busan seoul daegu
# Levels: seoul busan daegu
qplot(culAdd) # 차트 그리기.


# 클래스2
culGender2 <- factor(abc.csv$gender, levels = c(2, 1), labels = c("여", "남"))
culGender2
# [1] 남 남 남 남 여 여
# Levels: 여 남
qplot(culGender2) # 차트 그리기.

# print 는 콘솔 출력
print(abc.csv) # 반복문장 에서 유용하다. 여기선 그냥 abc.csv를 쓰는것과 같다.

# View(대소문자 조심) 는 Excel 처럼 테이블 View로 출력
# 따로 탭에 나온다.
View(abc.csv)

# 튜플 을 출력 해줌
# 튜플 앞에서 6개 출력
head(abc.csv)
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80    NA    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 6      2   2  60        7   daegu    40     3  3000      1

# 튜플 앞에서 3개 출력
head(abc.csv, 3)
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80    NA    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2

# 튜플 뒤에서 6개 출력
# 현재 DB자체는 6줄 이라 앞뒤 다 같음.
tail(abc.csv, 6)
#   gender job age position address total check price survey
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 6      2   2  60        7   daegu    40     3  3000      1

# 컬럼 명만 출력
names(abc.csv)
# [1] "gender"   "job"      "age"      "position" "address"  "total"    "check"    "price"    "survey"  

# 컬럼 출력
colnames(abc.csv, do.NULL = T)
# [1] "gender"   "job"      "age"      "position" "address"  "total"    "check"    "price"    "survey" 

# 튜플 이름 출력
row.names(abc.csv)
# [1] "1" "2" "3" "4" "5" "6"

# 속성 집합 출력, 행이 몇개 인지, 어떤 형태의 구조인지, 컬럼은 뭐가 있는지
# mode : 자료형
# class : 자료구조
attributes(abc.csv)
# $names
# [1] "gender"   "job"      "age"      "position" "address"  "total"    "check"    "price"    "survey"  
# $class
# [1] "data.frame"
# $row.names
# [1] 1 2 3 4 5 6

# abc.csv$[cul] $는 직접참조(불러온 객체의 컬럼 접근)
abc.csv$job
# [1] 1 2 2 3 3 2
abc.csv$total
# [1] 50 80 60 70 50 40
# $가 R에선 직접참조 이다.
# 구조$컬럼

mytotal <- abc.csv$total # 토탈컬럼 "값 만" 따로 추출.
mytotal
# [1] 50 80 60 70 50 40

# 컬럼 접근의 또 다른 방식
# 배열 접근 방식.
abc.csv[6]
#  total
# 1    50
# 2    80
# 3    60
# 4    70
# 5    50
# 6    40

# 여러 컬럼 접근하는 방법
abc.csv[c("job", "total")]
#   job total
# 1   1    50
# 2   2    80
# 3   2    60
# 4   3    70
# 5   3    50
# 6   2    40

abc.csv[c("gender", "age", "position")]

# 숫자로 여러 컬럼 접근하는 방법
abc.csv[c(1, 3:4)]
#   gender age position
# 1      1  10        2
# 2      1  20        5
# 3      1  30        4
# 4      1  40        4
# 5      2  50        5
# 6      2  60        7 

abc.csv[ ,2] # 열 단독 접근
# [1] 1 2 2 3 3 2
abc.csv[ ,3]
# [1] 10 20 30 40 50 60
abc.csv[2] # 열 단독 접근(컬럼명 포함)
#   job
# 1   1
# 2   2
# 3   2
# 4   3
# 5   3
# 6   2
abc.csv[3]
#   age
# 1  10
# 2  20
# 3  30
# 4  40
# 5  50
# 6  60
 
abc.csv[2, ] # 행 단독 접근
#   gender job age position address total check price survey
# 2      1   2  20        5   busan    80    NA    NA     NA
abc.csv[3, ]
#   gender job age position address total check price survey
# 3      1   2  30        4   daegu    60     5  2500      2

# 1, 3행만 보여주세요.
abc.csv[c(1, 3), ]
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 3      1   2  30        4   daegu    60     5  2500      2

# 2, 4열을 보여주세요.
abc.csv[ ,c(2, 4)]
#   job position
# 1   1        2
# 2   2        5
# 3   2        4
# 4   3        4
# 5   3        5
# 6   2        7
 
# 2, 5, 6열을 보여주세요.
abc.csv[ ,c(2, 5:6)]
#   job address total
# 1   1   seoul    50
# 2   2   busan    80
# 3   2   daegu    60
# 4   3   busan    70
# 5   3   seoul    50
# 6   2   daegu    40

# 마이너스가 붙으면 exclude(2, 5, 6열 제외하고)
abc.csv[ ,-c(2, 5:6)]
#   gender age position check price survey
# 1      1  10        2     5  1200      3
# 2      1  20        5    NA    NA     NA
# 3      1  30        4     5  2500      2
# 4      1  40        4     3  1200      5
# 5      2  50        5     3  1400      6
# 6      2  60        7     3  3000      1