본문 바로가기
R-기타

R기초 코드

by 미스터탁 2018. 4. 4.

#######################

# R기초 코드 입니다. 한줄씩 실행하면서 따라오시면 됩니다.

# 실행은 ctrl + r 또는 ctrl + enter입니다.

######################


a <- 1 ## a에 1을 넣는다라는 개념

b<-a+1 ## a에 1을 더해서 b에 넣는다


a ## a, b출력

b

a<-a+1


a<-c(1,2,3) ## a에 1,2,3을 칼럼으로 만들어 집어 넣는다


### () 는 함수를 의미


## c는 column의 약자 , vector로서 선언

b<-c("가","나","다") ## 문자의 경우 "" 로 묶어주면됨

d<-c("1","2","3")


class(b) 

class(d) ## d는 1,2,3이지만 문자로 되어있음

class(a)


## 문자형 벡터를 숫자로 변환시킨다.

e<-as.numeric(d)

class(e)

as.character(e)



#### 벡터의 요소에 접근법 (매우중요!!!!!!!!!!)

a[3]

b[1]

b[c(1,3)] ## 벡터의 1,3번째 요소 출력

b[-3]  ## 벡터의 3번째 요소만 제외하고 출력

b[c(-1,-3)] ## 벡터의 1,3번째 요소를 제외하고 출력

b[-c(1,3)] ## 위 결과와 동일


b[c(T,T,F)] ## True, False로 접근법

b[c(F,T,F)]

b[c(T,F)]




#########matrix만들기

m<-matrix(c(1,2,3,4,5,6),nrow=2,byrow=T) ## matrix의 선언 c(1,2,3,4,5,6)을 행렬로 만드는데, row의 수는 2로!

m


m2<-data.frame(m) ## data.frame화 하기 ## 

m2

m2[1,1]  ## matrix의 요소 접근법, 기본적으로 vector의 요소 접근법과 동일하다

m2[2,3] 

m2[1,]

m2[1,-1]

m2[,-1]

m2[c(T,F),c(F,T,T)]

m2$X1  ## 칼럼에 접근하는방법


colnames(m2)<-c("첫번째","두번째","세번째") ## 칼럼이름 설정법

m2$첫번째


m2[m2$첫번째 <3,]

m2[m2$첫번째 ==1,]

m2$네번째 <- c(7,8)

m2



rbind(m2,m2) ###### row로 묶는 방법 row + bind

cbind(m2,m2) ###### column으로 묶는 방법 column + bind


5 %% 2 ## 나머지 구하기

m2$다섯번째 <- ifelse(m2$첫번째 %% 2 ==0,"짝수","홀수") ## ifelse로 새로운 변수 만들기 

m2




########## m2행렬을 아래로 똑같이 복사해서 열번 붙여넣기 

m3<-NULL ## 빈값 선언

for(i in 1:10){

  m3<-rbind(m3,m2) ## m3와 m2를 묶어서 m3에 덮어 씌운다

  cat("\n",i)   ## i출력

}

m3 ## m3 출력


paste0(1:20,"행") ## 1부터 20까지 "행"을 붙여서 "1행","2행","3행",,,"20행"출력

colnames(m3)

rownames(m3)<-paste0(1:20,"행") ## rowname을 설정

dim(m3)[1] ## dimension 구하기

nrow(m3)

dim(m3)[2]

ncol(m3)


rownames(m3)<-paste0(1:dim(m3)[1],"행")




# install.packages("stringr") ## string 다루는 패키지 설치

library(stringr) ## 라이브러리는 R을 킬때마다 호출 해야함. 패키지는 컴퓨터당 1회만 설치하면됨

## 패키지에대한 설명은

## https://cran.r-project.org/web/packages/stringr/stringr.pdf 서 볼수 있음

## 모든 패키지는 https://cran.r-project.org/web/packages/패키지명/패키지명.pdf 에서 볼수 있음


m4[str_detect(m4$다섯번째,"짝수"),] ## string detect함수


getwd()

setwd("C:\\abc")

getwd()


write.csv(m3,"m3.csv",row.names=F) ## csv 저장. 기본적으로 rowname은 지우고 저장하는 걸 권장



m4<-read.csv("m3.csv") ## csv불러오기

m4









#####################

#다음과 같은 상황을 가정합니다.

#상위폴더안에 하위폴더가 3개가 있고, 각 폴더안에는 csv파일들이 있습니다. 이 csv파일들을 하나로 합치는 것을 R코드로 구현하고자합니다.


#상위폴더

# →하위폴더1

## →csv파일1, csv파일2, csv파일3

# →하위폴더2

## →csv파일4, csv파일5, csv파일6

# →하위폴더3

## →csv파일7, csv파일8, csv파일9

getwd()

setwd("C:\\abc")

filelist<-list.files() ## abc안에있는 파일리스트들을 불러옴


folder<-filelist[!str_detect(filelist,"csv") & !str_detect(filelist,".R")] ## csv나 R확장자를 가진것을 제외! (하위폴더만을 받아오기위함)



final_data<-NULL ## 전체 합칠 dataframe 을 빈값으로 선언

for(i in 1:length(folder)){

  

  setwd(paste0("C:\\abc\\",folder[i])) ## i번째 폴더로 working directory setting

  forder_file<-list.files()  ## 그 폴더 안에있는 파일들 불러서 forder_file변수에 저장

  imsi_data<-NULL ## 각 폴더별 저장할 dataframe 빈값으로 선언


    for(j in 1:length(forder_file)){      

     imsi_data<-rbind(imsi_data,read.csv(forder_file[j])) ## 각 폴더 안에있는 파일들을 read.csv통해서 불러들어서 imsi_data 와 rbind로 묶어서 imsi_data에 덮어 씌운다.

     cat("\n",i,"-",j)

  }

 ## 위 반복문을 돌리면 imsi_data안에는 i번째 폴더안에 있는 data들이 합쳐져 있음

  final_data<-rbind(final_data,imsi_data) ## imsi_data를 최종 데이터프레임과 rbind로 묶음

}

dim(final_data) #dimension확인

head(final_data) 







######################## list 형태 


##주소에 대한 변수에 대하여 광역지역만 뽑고 싶다고 가정합시다.

## 아래 예시에서는 각각 서울시, 전라남도, 경기도를 뽑고 싶은 것입니다.


juso<-c("서울시 강북구 번1동","전라남도 순천시 석현동","경기도 안산시 단원구")

juso2<-str_split(juso," ")  ## " "공백을 기준으로 분리

juso2 ## 출력 이와 같은 형태를 list라고 함. 


juso2[1] ## 첫번째 큰방 출력 list로 나옴

juso2[[1]] ## 첫번째 큰방 출력. vector로 나옴

juso2[[1]][2] ## 첫번째 큰방에 작은방 출력

###### [[ ]] 안에 있는 것들은 큰방, [ ]  안에 있는 것들은 작은방이라고 표현(제가) 합니다.

# 리스트는 큰방과 작은방으로 이루어져있고, 칼럼은 작은방으로만 이루어져있습니다. 행렬은 두 작은방의 조합으로 이루어져있죠



names(juso2)<-c("서울","전남","경기") ##리스트에 name을 설정

juso2$서울 ### $표시로도 접근이가능

as.character(unlist(juso2)) ## unlist -> list를 풀어헤치는 함수



do.call("rbind",juso2) ## do.call("함수",list) -> list에 대하여 함수를 한번에 적용할수 있음




######apply, sapply, lapply, tapply


aa<-m3[,-5]

apply(aa,1,sum) ## apply(행렬,1,함수) -> 행에 대하여 함수 적용

apply(aa,2,sum) ## apply(행렬,2,함수) -> 열에 대하여 함수 적용

apply(aa,1,mean,na.rm=T) ## 함수 뒤에 옵션 추가가능

apply(aa,2,mean)



tapply(m3$첫번째,m3$다섯번째,sum) ## tapply는 각 그룹별 함수 적용 가능

tapply(m3$첫번째,m3$다섯번째,mean)




ff<-function(x){x[1]} ## 사용자 정의함수 

## ff는 x를 인자로 받아 x의 작은방을 출력해주는 함수

## 즉 ff(c(1,2,3))을 실행하면 1이 출력되고 ff(c("가","나","다))를 실행하면 "가"가 출력된다.


sapply(juso2,ff) ## sapply는 리스트의 각 큰방에 접근하여 함수를 적용시킨다.

# 즉 위의 juso2 리스트에 대하여 ff함수를 적용 시킴으로, 서울시, 전라남도, 경기도를 출력 할 수 있다.

lapply(juso2,ff) ## lapply는 sapply와 비슷하나 출력형태를 list 그대로 유지시킨다.


ff2<-function(x,i){x[i]} ## x의 i번째 요소 출력하는 사용자 정의 함수

sapply(juso2,ff2,1)



ff3<-function(x){x[length(x)]} ## x의 마지막 요소를 출력하는 사용자 정의 함수

sapply(juso2,ff3)




인프런 강의 할인 쿠폰 코드입니다.

R로 하는 웹 크롤링 - 입문편(할인쿠폰코드) 236-69fc51d93a53 
https://www.inflearn.com/course/R-crawling# 

R로 하는 웹 크롤링 - 실전편 (할인쿠폰코드) 237-55c672aeb038 
https://www.inflearn.com/course/R-crawling-2# 

R로 하는 텍스트마이닝 (Top keyword부터 감성분석까지) (할인쿠폰코드) 238-c86096730061 
https://www.inflearn.com/course/R-text-mining#


R로 무작정 해보는 data science (할인쿠폰코드) 310-c6164f3d9be9 
https://www.inflearn.com/course/R-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EC%BD%94%EB%94%A9#


반응형

댓글