본문 바로가기
프로그래밍언어/R

[R] : 데이터 프레임 다루기(3)

by 오주현 2022. 3. 14.
반응형

데이터 프레임 다루기(3)

DF <- read.csv("c:/r/example_studentlist.csv")
a <- c(1:20)
s <- c("파스타", "짬뽕", "순두부찌개", "요거트 아이스크림", "커피")
L <- c(T,F,F,T,T,T)

List는 어떤 객체라도 다 받아들인다.

먼저 파일을 불러오고 여러 형식의 객체를 리스트 객체에 담아준다.

 

List <- list(DataFrame=DF, Number=a, Charcter=s, Logic=L)
List

리스트로 묶여 있을 뿐 서로 형태가 달라도 길이가 달라도 전혀 상관이 없다.

 

List[1] <- NULL

항목을 삭제한다.

 

List["Number"]

이름으로 List 객체 항목을 선택한다.

 

List[1]

class(List[1])

첫 번째 항목인 Number가 나온다. 하지만 class로 확인해 보면 List 객체이다.

 

List[[1]]

class(List[[1]])

Integer 객체로 선택하기 위해 []를 한 번 더 넣어줬다.

 

List[c(2,3)]

여러 항목을 선택할 수 있다.

 

	List[c("Number", "Character")]

여러 개 항목을 이름으로 선택할 수도 있다.

 

List$Number

$로 변수를 선택하는 것은 데이터프레임 말고도 리스트에서도 사용이 가능하다.

$를 사용하면 리스트의 객체가 아닌, 객체의 원래 형을 반환해 준다.

 

names(List) [2] <- "Num"

개발 항목 이름을 바꿔줄 수도 있다.

 

names(List) <- c("Num","Cha","Log")
List

모든 항목 이름을 한 번에 바꿔 줄 수도 있다.


이번에는 리스트 모든 항목에 동일한 함수를 적용해 본다.

 

DF <- read.csv("example_studentlist.csv")

데이터를 불러온다.

 

HeightBySex <- split(DF$height, DF$sex)
HeightBySex

데이터프레임에서 몇 개의 변수를 리스트로 만들어 본다. 이번에는 성별에 따른 키를 보고 싶을 때 리스트 객체에 담아 확인해 본다.

split()은 명목형 기준으로 데이터를 나눈다. split(데이터, 나눌명목형변수기준) 으로 작성한다.

 

mean(HeightBySex[[1]])

mean(HeightBySex[[2]])

리스트 항목별 평균을 구한다.

 

sapply(HeightBySex,mean)

한 번에 동일한 함수를 적용한다.

 

sapply(HeightBySex, sd)

모든 항목의 표준편차를 구한다.

 

sapply(HeightBySex, range)

모든 항목의 범위를 구한다.


이번에는 도수분포표를 만들어 본다.

 

DF <- read.csv("example_studentlist.csv")
DF

명목형 변수로 도수분포표를 만든다. 우선, 데이터를 불러온다.

 

Freq <- table(DF$bloodtype)
Freq

혈액형을 나타내는 변수의 빈도수를 구한다.

table() 함수를 이용하면 명목형 변수의 항목의 개수를 셀 수 있다.

 

ReleativeFreq <- prop.table(Freq)
ReleativeFreq

Table <- rbind(Freq, ReleativeFreq)
Table

상대도수로 구하고 행으로 붙인다. prop.table() 함수는 상대도수를 구하는 함수이다. 상대도수를 구하고 Freq 객체에 rbind를 통해 상대도수를 행으로 붙인다.

 

Table <- addmargins(Table, margin=2)
Table

합을 구한다. 합을 추가하기 위해 addmargins() 함수를 사용한다.

addmargins(테이블객체, margin=합을구하는방식) margin은 생략하면 행과 열의 합을 모두 구하고 1을 넣으면 열의 합만 구하고 2를 넣으면 행의 합만 구한다.

 


R에서 연속형 변수를 도수분포표로 만들어 본다.

DF <- read.csv("example_studentlist.csv")

연속형 변수를 도수분포표로 만들기 위해 먼저, 구간(계급)을 나눠야 한다. 일단 데이터를 불러온다.

 

FactorOfHeight <- cut(DF$heightn, breaks=4)
FactorOfHeight

4구간으로 나누어 주었다. cut(나눌변수, breaks=나누고싶은구간의계수, labels=나눈구간의이름) 이렇게 작성할 수 있다.

(155,162] 이런 형식으로 출력이 되는데 155에서 162까지인데 155는 포함하지 않고 162는 포함하라는 의미이다. 즉, ()은 포함하지 않는다. []는 포함한다라는 의미이다.

 

FreqOfHeight <- table(FactorOfHeight)
FreqOfHeight

빈도수(도수)를 구한다.

 

FreqOfHeight <- rbind(FreqOfHeight, prop.table(FreqOfHeight))
FreqOfHeight

상대도수를 구한다.

 

rownames(FreqOfHeight) [2] <- "RelativeFreq"
FreqOfHeight

이름을 바꾼다.

 

CumuFreq <- cumsum(FreqOfHeight[2,])
CumuFreq

FreqOfHeight <- rbind(FreqOfHeight, CumuFreq)
FreqOfHeigih

누적상대도수 구하기

 

rownames(FreqOfHeight) <- c("도수", "상대도수", "누적도수")
FreqOfHeight

이름 바꾸기

 

FreqOfHeight <- addmargins(FreqOfHeight, margin=2)
FreqOfHeight

합을 구한다.


이번에는 분할 표를 만든다.

DF <- read.csv("example_studentlist.csv")

두 변수의 조건을 만족하는 빈도수를 나타내는 표이다. 먼저, 데이터를 불러온다.

 

CT <- table(DF$sex, DF$bloodtype)
CT

두 변수를 table()를 이용해 빈도수를 구한다.

 

addmargins(CT)

행과 열의 합을 구한다.

 

PropCT <- prop.table(CT)
PropCT

상대도수를 구한다.

 

addmargins(PropCT)

상대도수 합을 구한다.

 

PropCT <- prop.table(CT, margin=1)
PropCT

남녀별로 상대도수를 구한다.

amrgin 인자값에 1을 넣으면 행의 비율로 계산한다.

 

addmargins(PropCT, margin=2)

상대도수 합을 구한다. 값이 없는 것을 결측치라 부르고 관련 함수는 complete.cases()와 na.omit()을 사용한다.

 

a <- c(1,2,3,4,NA,6,7,8,9,10)
a

complete.cases(a)

complet.cases() 함수는 NA값을 조사해 논리값으로 변환한다.

 

a <- a[complete.cases(a)]
a

5번째 NA값이 FALSE이다. 이를 통해 NA값을 제거할 수 있다.

 

a <- na.omit(a)
a

NA값을 완전히 제거하는 함수도 있다.

반응형

댓글