데이터 프레임 다루기(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값을 완전히 제거하는 함수도 있다.
'프로그래밍언어 > R' 카테고리의 다른 글
[R] : 데이터 개념 이해하기(2) (0) | 2022.03.14 |
---|---|
[R] : 데이터 개념 이해하기(1) (0) | 2022.03.14 |
[R] : 데이터 프레임 다루기(2) (0) | 2022.03.14 |
[R] : 데이터 프레임 다루기(1) (0) | 2022.03.11 |
[R] : 표로 데이터 정리하기 (0) | 2022.03.11 |
댓글