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()