Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

초보자의 빅데이터 정복기

22-08-05 chap04_1_Control 본문

아이티월 수업일지(R)

22-08-05 chap04_1_Control

서부남93 2022. 8. 5. 16:38

chap04_1_Control

 

# <실습> 산술연산자 
num1 <- 100 # 피연산자1
num2 <- 20  # 피연산자2
result <- num1 + num2 # 덧셈
result # 120
result <- num1 - num2 # 뺄셈
result # 80
result <- num1 * num2 # 곱셈
result # 2000
result <- num1 / num2 # 나눗셈
result # 5

result <- num1 %% num2 # 나머지 계산
result # 0

result <- num1^2 # 제곱 계산(num1 ** 2)
result # 10000
result <- num1^num2 # 100의 20승
result # 1e+40 -> 1 * 10의 40승과 동일한 결과


# <실습> 관계연산자 : T/F 반환
# (1) 동등비교 
boolean <- num1 == num2 # 두 변수의 값이 같은지 비교
boolean # FALSE
boolean <- num1 != num2 # 두 변수의 값이 다른지 비교
boolean # TRUE

# (2) 크기비교 
boolean <- num1 > num2 # num1값이 큰지 비교
boolean # TRUE
boolean <- num1 >= num2 # num1값이 크거나 같은지 비교 
boolean # TRUE
boolean <- num1 < num2 # num2 이 큰지 비교
boolean # FALSE
boolean <- num1 <= num2 # num2 이 크거나 같은지 비교
boolean # FALSE

# <실습> 논리연산자(and, or, not, xor)
logical <- num1 >= 50 & num2 <=10 # 두 관계식이 같은지 판단 
logical # FALSE
logical <- num1 >= 50 | num2 <=10 # 두 관계식 중 하나라도 같은지 판단
logical # TRUE

logical <- num1 >= 50 # 관계식 판단
logical # TRUE
logical <- !(num1 >= 50) # 괄호 안의 관계식 판단 결과에 대한 부정
logical # FALSE

# 배타적 논리합 
x <- TRUE; y <- FALSE
xor(x,y) # [1] TRUE
x <- TRUE; y <- TRUE
xor(x,y) # FALSE

# 제어문: 조건문과 반복문

# 1. 조건문 : if(조건식), ifelse(조건식),which(조건식)

# 1) if(조건식){실행문} else{실행문}

x <- 20

if(x >= 40){x = x *2 
cat("x =", x)} 
else {x = x +2  
cat("x = ", x)}



# 2)if형식2 : 다중선택
score <- scan() #키보드 입력

if(score>=90){
  cat('A학점 : ', score) #score = 95
}else if(score >= 80){
  cat('B학점 : ', score) #score = 82
}else if(score >= 70){
  cat('C학점 : ', score) #score = 79
}else{
  cat('F학점 : ', score) #score = 65
}

#문1) 키보드로 입력한 점수가 짝수 or 홀수 인지 구분하기
socre
socre <- scan()


if(score %% 2 ==0){
  cat('짝수:',score)
}else{
  cat('홀수:',score)}

# 3) ifelse(조건식, 참, 거짓): 조건 + 반복(size) 기능
# vector 입력: -> ifelse() -> vector 출력


#합격 처리
score <- c(75,85,60,NA,55)
score

output<-  ifelse(score >= 70,'합격','불합격')
output

# 결측치 처리 : 0 대체, 평균 대체 

na_re <- ifelse(is.na(score),0, score)
na_re #75 85 60  0 55

mean(score,na.rm = T)

na_re2 <- ifelse(is.na(score),mean(score,na.rm = T), score)
na_re2

getwd()
setwd( "C:/ITWILL/3_Rwork/data")

excle <- read.csv('excel.csv')
str(excle)

q3 <- excle$q3
length(q3) #402

range(q3) #1 5

result<-ifelse(q3 >= 3, '큰 값', '작은 값')
table(result) 
# 작은 값   큰 값 
# 77     325 

#    4) which(조건식): 값의 위치(index) 반환

#[1]벡터대상
x <- c(2,5,10,30:50)

length(x) #24

idx <- which(x == 39)
idx

x[idx] #39

# [2]데이터프레임에서 사용 예
no <- c(1:5)
name <-c("홍길동","이순신","강감찬","유관순","김유신")
score <- c(85,78,89,90,74)

exam <- data.frame(학번=no,이름=name,성적=score)
exam
idx<-which(exam$이름=="유관순") # [1] 4, 없으면 0

exam[idx,]
#4    4 유관순   90

# 2. 반복분 : for(변수 in 값), while(조건식)

# 1) for(변수 in 값){실행문}

num <- 1:10
num

#벡터형 변수 선언
d <- c() #빈 벡터 : d <-v^2
d

for (v in num) {
  cat('v =',v,'\n')
  d<- c(d,v^2) # 벡터변수 저장
}
d
# v: 스칼라(scala), num: 벡터(vector)
# 스칼라: 1개 원소
# 벡터 : 2개 이상 원소
cat('d=',d)
# d= 1 4 9 16 25 36 49 64 81 100

# 문2) num을 대상으로 홀수 또는 짝수를 저장하는 벡터 변수 만들기

for (re_num in num) {
  if(v %% 2 == 0){
  re_num <- c(re_num,'짝수')}
  else{
    re_num <- c(re_num,'홀수')
  }
}
re_num<- c(1:10)
re_num
cat('re_num:',re_num)

# 짝수/홀수 합
even <- 0 # 짝수 합
odd <- 0 # 홀수 합



for (v in num) {
  if(v %% 2 == 0){
    even <- even + v
  }else{
    odd <- odd+v
  }
}

cat('even=',even,'odd=',odd )

# while(조건){표현식}

i = 0

while (i <10) {
  i <- i +1 #카운터 변수
   print(i) #1~10 까지 출력됨
}

# 문3) while문으로 x의 각 변량에 짝수만 y에 저장하기
x <- 1:1000
x
y <- c() #벡터형 변수 선언

#while문 예
while (i < length(x)){ #x 크기 만큼 반복
  i <- i+1             # 카운터 변수
  
  #반복변수를 색인으로 이용
  if(x[i] %% 2 ==0){ 
    y<- c(y,x[i])
  }
}

cat('y =',y)



# for문 예
for (v in x) {
  if(v%% 2==0){
    y <- c(y,v)
  }
}

cat('y=',y)

Comments