#2차원 데이터의 저장
[매트릭스/ 행렬]
matrix: 전체의 데이터 타입이 동일한 구조여야 함. (숫자로만 or 문자로만)
- 행과 열이 존재
- nrow 행의수 / ncol 열의수 = 지정을 통해서 행과 열의 갯수 설정 가능
- 근데 행열을 직접 만드는 경우는 거의 없이 데이터를 파일에서 불러옴
z <- matrix(1:20, nrow=4, ncol=5) z2 <- matrix(1:20, nrow=4, ncol=5, byrow=T) |
1:20 은 행렬/매트릭스의 저장될 값(1~20)을 지정한 것이다. nrow=4는 매트릭스 행의 수, ncol=5는 매트릭스 열의 수를 의미한다. 매트릭스에 저장될 값들을 행 방향으로 채우기 : " byrow=T " |
두 개의 벡터를 행 방향으로 묶어주는 함수 : rbind()
> m2 <- rbind(x,y) > m2 |
두 개의 벡터를 열방향으로 묶어주는 함수 : cbind()
> m1 <-cbind(x,y) > m1 |
[데이터프래임 data frame]
- 숫자와 문자를 섞어서 저장 가능, 하지만 column 내에서는 동일한 타입이어야!
-data.frame() 함수로 생성
ciry <- c("Seoul","Tokyo","Washington") #문자로 이루어진 벡터 rank <- c(1,3,2) #숫자로 이루어진 벡터 city.info <- data.frame(city, rank) #데이터프레임 생성 city.info #city,info의 내용 출력 |
[데이터 추출 함수 (매트릭스, 데이터프레임 둘다 적용가능)]
함수 | 의미 |
rownames() | 행의 이름을 출력 |
colnames() | 열의 이름을 출력 |
dim() | 행과 열의 개수를 출력 |
nrow() | 행의 개수를 출력 |
ncol() | 열의 개수를 출력 |
head() | 시작부분에 있는 일부데이터(5개)출력 |
tail() | 끝부분에 있는 데이터 일부 출력 |
str() | 매트릭스, 데이터프레임의 요약 정보를 출력 |
unique() | 그룹(종류)의 값이 저장된 벡터에서 중복을 제외하고 그룹 확인 |
table() | 그룹(종류)의 값이 저장된 벡터에서 각 그룹별로 몇 개의 관측치가 존재하는지 출력한다 ( 도수분포표 ) |
[행과 열의 합계와 평균]
함수 | 의미 | |
colSums() | 열별 합계를 출력한다. | colSums(iris[,-5]) #열별 합계 |
rowSum() | 행별 합계를 출력한다. | rowSums(iris[,-5]) #행별 합계 |
colMeans() | 열별 평균을 출력한다. | colMeans(iris[,-5]) #열별 평균 |
rowMeans() | 행별 평균을 출력한다. | rowMeans(iris[,-5]) #행별 평균 *[,-5] : 5번째 열은 제외하고 |
t() | 행방향과 열방향을 변환한다. | transpose |
subset() | 조건에 맞는 행을 추출한다. | subset(대상,행추출조건)함수 |
class() | 자료구조를 확인한다. | |
is.matrix() | 행렬(matrix) 여부를 확인한다. | is.matrix(iris) #TRUE/FALSE 로 답 나올것 |
is.data.frame() | 데이터프레임 여부를 확인한다. | is.data.grame(iris) #TRUE/FALSE |
*추가설명) T() 함수: 행과열 변환하기 (transpose)
- 설문조사 데이터 등 분석하기 어려운 형태일 때 't'함수로 변환
z<-matrix(1:20,nrow=4,ncol=5) z t(z) |
*추가설명) subset(대상,행추출조건)함수 : 조건에 맞는 행(row) 추출
*matrix를 subset하고 싶다면, dataframe으로 바꾼 후 하기
IR.1 <- subset(iris, Species=="setosa") IR.1 IR.2<-subset(iris,Sepal.Length>5.0& Sepal.Width>4.0) IR.2 |
#대상, 행추출조건 (Iris 데이터셋에서 품종정보가 setosa인 행만 뽑아서) #IR.1에저장 #조건1이 sepal.Length가 5보다 크고 &(and의의미) #조건2 sepal.width가 4보다 큰 데이터들을 뽑아 IR2에 저장 |
*하나의 명령문은 한 줄에 작성하는 것이 일반적이나, 명령문이 긴 경우는 여러줄에 걸쳐서 작성 하되
여러줄에 걸칠 때는 연결부(%나',' 등)을 앞부분 명령문에 남겨두어야 뒤에 이어지는 문장이 있음을 알 수 있음
Matirx간에도 사칙연산이 가능 (단, 행/열의 수가 동일할 때)
단순히 a*b는 대응되는 행/열 값끼리 곱하는 것이고
수학시간에 배운 행렬곱셈은 %*%를 이용
3*a #매트릭스a에 들어있는 모든 원소에 3을 곱하기 b-5 #매트릭스b에 들어있는 모든 원소에 5를 빼기 a<-3*a #원소에 계산한 값을 매트릭스a에 다시 저장하는 것 cf)위에서는 그냥 계산만하는 건데, 'a<- ' 이렇게 저장함으로써 아예 매트릭스의 데이터 자체를 변경하는 것 |
[매트릭스 vs 데이터프래임]
1) 데이터프래임을 매트릭스로
iris.m<-as.matrix(iris[,1:4]) head(iris.m) class(iris.m) |
#iris라는 df를 (전체행,1~4열까지의 데이터) 추출해서 매트릭스로 변환해라 #head #class로 자료 구조 확인해보는 것 |
tmp<-iris[,-5] class(tmp) tmp2<-as.matrix(tmp) class(tmp2) |
#iris에서 -5 wmr 5번째 열을 제외한 나머지를 tmp라고 하는 자료구조에 저장 #class를 통해 tmp의 자료구조가 뭔지 확인 #tmp를 as.matrix로 변환해서 tmp2에 저장 #tmp2의 자료구조를 다시 확인해보면? 매트릭스라는 값이 나올 것 |
2) 매트릭스를 데이터프래임으로
st<-data.frame(state.x77) head(St) class(St) |
*R함수의 입력형식 확인
-매트릭스 또는 데이터프레임 중 특정포맷을 요구하는 함수가 존재
-요구하는 포맷이 아닌 경우 계속 에러가 뜸
-이럴 땐 HELP 기능으로 매뉴얼을 통해 확인
[파일에서 데이터 읽어오기 - 저장되어 있는 파일]
엑셀에서 .CSV 포맷으로 저장 (콜롬과 콜롬을 콤마로 구분한 형태의 텍스트 파일을 의미)
read.csv("읽으려는파일이름", 첫줄(header)의 정보로 열이름이 따로 있으면 true/ 없으면 false로 지정하면됨)
setwd("C:/Rworks") mydata<-read.csv("test.csv",header=TRUE) mydata head(mydata) tail(mydata) mydata[2,3] nrow(mydata) ncal(mydata) dim(mydata) mRow1<-mydata[2,] mRow2<-mydata[,3] |
#파일있는 폴더지정 / wd는 working directory의미/ C드라이브의 Rworks라는 폴더에 파일이 들어가있다 # read.csv (test.csv라는 파일, 열이름존재) 이걸 mydata에 저장해라 # mydata의 전체 데이터 출력 # 앞의 몇 줄 데이터만 출력 #뒤의 몇 줄 데이터만 출력 #2행 3열의 원소값 출력 #행의 개수 출력 #열의 개수 출력 #행, 열의 개수 출력 #2행의 값들을 추출해서 벡터생성 #3열의 값들을 추출해서 벡터생성 |
[파일에 데이터 저장]
write.csv(저장할변수(배열), 저장될파일이름(setwd에서 지정한 폴더에 저장됨), 행이름 붙일지, 문자열저장)
mynew<-mydata[,c(2,3)] write.csv(mynew,kid_new.csv", row.names=F, quote=F) |
#mydata에서 2,3번째 콜롬만 잘라서 mynew라는 새로운 배열 생성 #mynew배열을 파일로 저장 -저장할 변수가 뭔지 -어떤 파일에 저장하는 지 -행 이름 붙일지 말지 -문자열에 "" 붙일지 말지 (quote는 어떤 열에 문자열이 들어가 있는데 그 문자열에 공백 존재 시 새로운 콜롬으로 인식 될 가능성이 있기 때문에 하나의 단어라는 뜻으로 따옴표를 붙이는데 그걸 할지 말지를 지정하는 값) |
[읽고 쓸 파일을 지정하는 여러가지 방법]
1) 파일이 있는 폴더를 지정 | setwd("C:/Rworks") mydata <- read.csv("test.csv", header = TRUE) mydata |
2) 저장된 path 전체를 지정 : Setwd 없이 바로 읽고 쓰는 방법임 |
mydata <- read.csv("C:/Rworks/test.csv", header = TRUE) |
3) 파일 탐색기 등으로 찾아서 읽어오기 :파일 탐색 기능 함수를 사용 |
mydata <- read.csv(file.choose(), header = TRUE) |
[리스트]
-벡터와 비슷하지만, 여러 자료형의 데이터를 섞어서 저장 가능
-심지어 벡터나,데이터프래임 등도 원소로 저장이 가능
-리스트에서 요소값을 불러올 때는 반드시 꺽쇠 2개 사용 [[숫자]]
member[[1]] member$name |
[]로 불러오면 저장한 type이 아니라 list형태로 결과 추출됨 [[]]로 불러와야 원소값 가져올 수 있음 |
[팩터(factor)]
-벡터와 유사한 구조의 문자형 변수 (숫자는 x)
- 특정 종류의 값만을 가질 수 있는 데이터 타입으로 factor() 함수 이용해서 생성 가능
*예) 혈액형 타입을 수집 변수가 취할 수 있는 값은 A,B,AB,O 다른 종류의 문자는 에러
blood.type<-factor(c("A","A","AB","O","B")) blood.type is.factor(blood.type) |
# factor() 함수 통해 변수값을 팩터타입으로 변환해라 그럼 저 변수에 있는 값들로만 앞으로 들어갈 수 있는 데이터가 픽스됨 만약 D라는 값 집어넣게 되면 에러 뜸 |
-팩터는 label 순서대로 숫자로 변환 가능함
blood.type as.numeric(blood.type) >blood.type [1] A A AB O B Levels: A AB A O >as.numeric(blood.type) [1] 1 1 2 4 3 |
Levels : blood type에는 A, AB, B, O만 올수 있다 as.numeric : 숫자로 치환하라 Levels에 있는 순서대로 숫자로 변경됨 |
'ADsP > 3과목' 카테고리의 다른 글
[3과목] 3-4. 통계분석 (1)통계분석 이해 (1) | 2022.09.25 |
---|---|
[3과목] 3-3.데이터 마트 (2) 데이터 가공&관리 (0) | 2022.09.21 |
[3과목] 3-3. 데이터마트 (2) | 2022.09.19 |
[3과목] 3-2. R 기초 (1) 변수& 벡터 (0) | 2022.09.17 |
[3과목] 3-1. 데이터분석 개요 (0) | 2022.09.15 |