1.R기초

1.1 주석과 도움말

함수, 패키지 등에 대한 설명을 얻고 싶을 때는 ?, help를 이용할 수 있다.

?print
help(print)

1.2 패키지 설치

install.packages("randomForest")
library("randomForest")
update.packages("rpart")

1.3 기본 연산자

2+2
2-2
2*2
2/2
3/2
2%%2 # 나머지 
3%/%2 # 몫 
2^3
2**3

1.4 비교 연산자

x=2 ; y=3
x==y
x!=y
x>=y
x>y
x<=y
x<y

1.5 함수 생성

sumfunction=function(x,y){return(x+y)}
sum(2,4)
## [1] 6

1.6 NA와 NULL

NA는 NA 자체로 인식하지만 NULL은 0으로 인식한다.

sum(1,NA,2)
## [1] NA
sum(1,NULL,2)
## [1] 3
sum(1,2,NA,na.rm=T)
## [1] 3

1.7 날짜와 시간

Sys.Date() # 날짜 확인 
Sys.time() # 시간 포함 날짜 확인 
date() 

현재 날짜, 시간을 알고 싶을 때는 위와 같은 함수를 이용하면 된다.

as.Date("2018-07-02") #날짜 변수로 변환 
as.Date("2018-07-04")-as.Date("2014-05-08")
as.Date(3000,origin="2014/05/08") 
as.Date(-10,origin="2014/05/08")

1.8 lubridate 패키지

library("lubridate")
date=now()
date()
year(date)
month(date,label=T)
month(date,label=F)
day(date)
wday(date,label=T)
wday(date,label=F)
date=date-days(2)
month(date)=2 # 월을 2월로 바꾸기 
year(date)=2017
date
date-days(2)
date+months(1)
date+years(1)
date+hours(1)
date+minutes(1)
date+seconds(1)
date=hm("22:30") ; date
date=hms("22;30:15"); date

2. 데이터 구조

2.1 Vector 구조

vector=c(1,2,3,4,5)

2.2 Matrix 구조

a=matrix(c(1:4),nrow = 2,ncol = 2,byrow = T)
b=matrix(c(5:8),nrow = 2,ncol = 2,byrow = T)

#매트릭스 결합

rbind(a,b)
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
## [4,]    7    8
cbind(a,b) 
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    5    6
## [2,]    3    4    7    8

2.3 Array

arr=c(1:24)
dim(arr)=c(3,4,2)
array(arr,dim(arr))
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24

2.4 List

  • 리스트 생성 및 이름 붙이기
son=list(son.name=c("minchul","minsu"),son.gender=c("male","male"),son.age=c(2,6))
names(son)=c("name","gender","age") # 리스트 이름 붙이기 
son
## $name
## [1] "minchul" "minsu"  
## 
## $gender
## [1] "male" "male"
## 
## $age
## [1] 2 6
  • 리스트 인덱스
son[[2]]
## [1] "male" "male"
son[[2]][1] # 리스트의 인덱스 !! 행렬과는 다르니 주의!! 
## [1] "male"
  • 리스트 합치기
list1 <- list(1,2,3)
list2 <- list("Sun","Mon","Tue")
newlist=c(list1,list2)
newlist
## [[1]]
## [1] 1
## 
## [[2]]
## [1] 2
## 
## [[3]]
## [1] 3
## 
## [[4]]
## [1] "Sun"
## 
## [[5]]
## [1] "Mon"
## 
## [[6]]
## [1] "Tue"

2.5 Data.frame

  • 데이터 프레임 생성 - data.frame
char1=c("A","B","C","D","E")
num1=c(1,1,2,2,3)
test1=data.frame(char1,num1)
test1
##   char1 num1
## 1     A    1
## 2     B    1
## 3     C    2
## 4     D    2
## 5     E    3
sales1=matrix(c(1,'Apple',500,5,
                2,'Peach',200,2,
                3,'Banana',100,4,
                4,'Grape',50,7),nrow=4,byrow=T) # 데이터 생성 
sales1
##      [,1] [,2]     [,3]  [,4]
## [1,] "1"  "Apple"  "500" "5" 
## [2,] "2"  "Peach"  "200" "2" 
## [3,] "3"  "Banana" "100" "4" 
## [4,] "4"  "Grape"  "50"  "7"
df1=data.frame(sales1)
names(df1)=c("no","name","price","city") # 데이터 이름 지정
df1
##   no   name price city
## 1  1  Apple   500    5
## 2  2  Peach   200    2
## 3  3 Banana   100    4
## 4  4  Grape    50    7
  • 데이터 프레임에서 원하는 조건 출력 - subset
subset(df1,price==500) 
##   no  name price city
## 1  1 Apple   500    5
subset(df1,price==c(500,200)) 
##   no  name price city
## 1  1 Apple   500    5
## 2  2 Peach   200    2
subset(df1,price==c(500,200),select=name) 
##    name
## 1 Apple
## 2 Peach
  • 데이터 프레임 합치기 - cbind, rbind
no=c(1,2,3)
name=c("apple","banana","peach")
price=c(100,200,300)
df1=data.frame(NO=no,NAME=name,PRICE=price)
df1
##   NO   NAME PRICE
## 1  1  apple   100
## 2  2 banana   200
## 3  3  peach   300
no=c(10,20,30)
name=c("train","car","airplane")
price=c(1000,2000,3000)
df2=data.frame(NO=no,NAME=name,PRICE=price)
df2
##   NO     NAME PRICE
## 1 10    train  1000
## 2 20      car  2000
## 3 30 airplane  3000
df3=cbind(df1,df2) # cbind를 이용해서 합치기 
df4=rbind(df1,df2) # rbind를 이용해서 합치기 
df3 ; df4
##   NO   NAME PRICE NO     NAME PRICE
## 1  1  apple   100 10    train  1000
## 2  2 banana   200 20      car  2000
## 3  3  peach   300 30 airplane  3000
##   NO     NAME PRICE
## 1  1    apple   100
## 2  2   banana   200
## 3  3    peach   300
## 4 10    train  1000
## 5 20      car  2000
## 6 30 airplane  3000
  • 데이터 프레임 합치기 - merge
df5=data.frame(name=c("apple","banana","cherry"),
               price=c(300,200,100))
df6=data.frame(name=c("apple","cherry","berry"),
               qty=c(10,20,30))
df5 ; df6
##     name price
## 1  apple   300
## 2 banana   200
## 3 cherry   100
##     name qty
## 1  apple  10
## 2 cherry  20
## 3  berry  30
merge(df5,df6)
##     name price qty
## 1  apple   300  10
## 2 cherry   100  20
merge(df6,df5) 
##     name qty price
## 1  apple  10   300
## 2 cherry  20   100
merge(df5,df6,all = T) # all 을 지정해주면 값이 없는 행도 추가해서 보여줌 
##     name price qty
## 1  apple   300  10
## 2 banana   200  NA
## 3 cherry   100  20
## 4  berry    NA  30
merge(df6,df5,all = T) 
##     name qty price
## 1  apple  10   300
## 2  berry  30    NA
## 3 cherry  20   100
## 4 banana  NA   200
  • 데이터 프레임 행열 추가
new=data.frame(name="mango",price=400)
df7=rbind(df5,new)
df8=rbind(df7,data.frame(name="berry",price=500))
df9=cbind(df8,data.frame(qty=c(10,20,30,40,50)))
df9
##     name price qty
## 1  apple   300  10
## 2 banana   200  20
## 3 cherry   100  30
## 4  mango   400  40
## 5  berry   500  50

3. 조건문

3.1 if 문

  • else
a=3
if(a==3)
{
  print("3입니다")
}else
{
  print("3이 아닙니다")
}
## [1] "3<U+C785><U+B2C8><U+B2E4>"
  • else if
a=4
if(a==3)
{
  print("3입니다")
} else if(a==2)
{
  print("2입니다")
}

3.2 for 문

  • for문
for(i in 1:10)
{
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
  • for루프 length()결합
x=1:10
for(i in x)
{
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
x=c(1:10)
for(i in 1:length(x))
{
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
  • 예제1
say=function(s)
{
  print("당신이 입력한 결과는 다음과 같습니다")
  print(s)
}

say("안녕하세요")
  • 예제2
final.score=function(name,current.score)
{
  print(name)
  print(paste("your final score",current.score+2))
}

final.score("백광렬",98)
  • return 함수
cal.profit=function(sales,cost)
{
  profit=sales-cost
  return(profit)
}

jan.profit=cal.profit(200,120)
feb.profit=cal.profit(230,110)

print(jan.profit)
## [1] 80
print(feb.profit)
## [1] 120
cal.profit(2000,111)
## [1] 1889

*빈 인자로 함수 만들기 !

askGender=function()
{
  answer=readline("성별을 입력하세요!")
  if(answer=="남")
  {
    print("안녕하십니까, 남자선생님")
  }else
  {
    print("안녕하십니까, 여자선생님")
  }
  }

askGender()
  • 빈 인자 연습문제
askname=function()
{
  answer=readline("이름을 입력해주세요!")
  if(answer=="백광렬")
  {
    print("백광렬님이 입장하셨습니다")
  }
}

askname()