# 주석달기
# 세미클론은 하나의 명령어가 끝났다는 것을 알려주는 기능,
# 마지막 줄에는 세미클론을 사용할 수 없다.
number1 = 1;
number2 = "문자열"
# Ctrl + shift / 명령실행, 다중 명령일 경우 블록을 잡고 명령실행
# Shift + Enter / 동일한 위치에 다른 아규먼트가 올 수 있도록 함
# 대소문자를 구분함
number3 = 1;
Number3 = "다른 변수가 됨"
# 변수할당
num1 = 2;
num2 = 4;
num3 = num1 + num2;
num4 = num2 - num3;
num2 / num1;
# 거듭제곱
num1**2 == num1^2; # true
# 몫
num2 %/% num1;
# 나머지
num2 %% num1
변수를 재할당해서 저장할 수 있다.
다른 프로그래밍 언어와 마찬가지로 변수의 재할당으로 인한 오류를 방지하기 위해서
변수네이밍과 변수의 관찰이 필요하겠다.
# 할당 연산자
# 오른쪽의 값을 왼쪽에 저장
num5 <- 30;
num6 = "문자열이 아니다";
# 왼쪽의 값을 오른쪽에 저장
20 -> num6
1 > 2 #false
30 >= 29 #True
20 < 30 #True
1 <= 2 #True
# == 같다
20 == 20 #True
# != 같지않다.
5 != 20 #True
# ! 부정연산자
!(1 > 2) #True
num = 1;
str = "하이";
float = 1.23;
boolean = FALSE
# mode() 함수, 데이터 타입을 문자열 형태로 반환한다.
mode(num)
mode(str)
mode(float)
mode(boolean)
num = 1;
str = "하이";
float = 1.23;
boolean = FALSE
# is 함수 , TRUE 또는 FALSE로 반환
# 실수 여부 확인, 정수도 실수다.
is.double(float)
# 정수 여부 확인, 실수는 정수가 아니다.
is.integer(float)
# 수치형 확인
is.numeric(float)
# 문자형 확인
is.character(str)
# 논리형 확인
is.logical(boolean)
# 복소수형 여부 확인
is.complex(num)
# NULL여부 확인
is.null(str)
# NA 여부 확인
is.na(num)
# 유한수치 여부 확인
is.finite(num)
# 무한수치 여부 확인
is.infinite(num)
# 강제 형변환
char = "3";
float = 1.23;
char = as.numeric(char) # char = 3
float = as.integer(float) # float = 1
# 실수형으로 변확
as.double(데이터)
# 문자형으로 변환
as.character(데이터)
# 논리형으로 변환
as.logical(데이터)
# 복소수형으로 변환
as.complex(데이터)
벡터
매트릭스
배열
데이터 프레임
리스트
# 숫자형 벡터
x = c(1,2,3,4);
# 문자형 벡터
x2 = c("커피", "우유");
# 논리연산자형 벡터
x3 = c(TRUE, FALSE, TRUE)
#변수를 이용하여 벡터를 저장할 수 있으며
#하나의 타입으로 자동형변환되어 저장된다.
x4 = c(x, x2)
# a : b -> a ~ b까지 int형으로 벡터에 저장한다.
x4 = 1 : 4 # 1,2,3,4
#seq함수,조건을 부여하여 값을 생성한다.
x5 = seq(from=2, to=20, by = 3)
#2부터 20까지 3씩 증가하여 값을 담아라.
#sequency 함수 정수만 값을 포함하여 담는다.
x4 = sequence(4)
#함수에 들어가는 매개변수까지 1씩 증가여 담는다.
# rep()함수, 첫번째 매개변수의 값을 두번째 매개변수 만큼 반복한다.
x2 = rep("3번 반복", times=3)
x3 = rep(c(x,x4), times=2)
# 열을 기준으로 벡터를 결합한다.
# 각각의 매개변수를 열로 구성하여 하나의 데이터로 결합시킨다.
x3 = cbind(x1, x2)
#행을 기준으로 벡터를 결합한다.
# 각각의 매개변수를 행으로 구성하여 하나의 데이터로 결합시킨다.
x4 = rbind(x1, x2)
# 1차원 벡터 내부에 존재하는 값들이 어떤 값으로 이루어져 있는지 확인 가능
gender = c("m", "m", "f", "m", "f")
gender_f = factor(gender)
gender_f # Levels : f m
# 행렬(Matrix) 생성
# 행렬을 2개열로 생성함, 값은 열방향으로 할당된다.
x1 <- matrix(c(1:6), ncol = 2)
x1
#행렬을 2개 행으로 생성함,값은 열방향으로 할당된다.
x2 <- matrix(c(1:20), nrow = 2)
x2
#생성은 위와 동일
x2 <- x2 * 3
#각각의 값마다 3을 곱한다.
x2
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 3 9 15 21 27 33 39 45 51 57
# [2,] 6 12 18 24 30 36 42 48 54 60
#1차원 배열, 2차원 배열 생성
x1 = array(1: 10, dim = 10);
#아래와 같이 작성해도 결과는 동일하다.
x1 = array(c(1:10))
x1[1]
#2차원 배열 구성
# dim의 값에 c(a,b) 값을 넣어 행렬의 수를 정할 수 있으며 부족한 수는 자동으로
# 1씩 증가하여 채우고 초과한 값은 생략한다.
x2 = array(1:10, dim = c(3,5))
x2
x2[2,3]
#인수형 매트릭스 생성
x1 = matrix(1:6, nrow = 3, ncol = 2)
#인수형 배열 생성
x2 = array(1:100, dim = c(10,10))
#문자형 백터 생성
x4 = c("문자열", "벡터")
#생성된 변수 list에 저장
x3 = list(x1,x2,x4)
x3[1] #x1의 데이터
#데이터 프레임
x1 = 1:4
x2 = c(10,20,30,40)
x3 = c("m","f","m","f")
#생성된 데이터를 프레임에 저장하기
#열의 갯수가 맞아야하며 열마다 저장되는 타입이 동일해야 되기때문에
#데이터 타입을 준수하는 적절한 데이터 함수를 이용한다.
df = data.frame(x1, x2, x3)
df
#콘솔창에서 데이터 타입과 구조를 살펴봄
str(df)
#테이블 형태로 데이터구조를 살펴봄
View(df)
# 조건문
x = 50
# 다른 프로그래밍 언어와 동일하다
if(x > 100){
print("x는 100보다 큽니다다")
}else{
print("x는 100다 작습니다다")
}
#ifelse(조건문, 실행문1, 실행문2)
# ifelse는 True이면 실행문1, FALSE이면 실행문2를 실행한다
ifelse(x > 40, print("x는 40보다 큽니다."), print("x는 40보다 작습니다다"))
# 반복문
x = matrix(c(1:100), nrow = 10, ncol = 10)
x
for (i in 1:10) {
for (j in 1:10) {
print(x[j,i])
}
};
#while문
a = 0
while(a < 10){
#변화되는 값을 할당할때는 화살표를 사용한다.
print(a <- a + 1)
}
#함수
username <- function(x) {
return (x + 1)
}
username(10)
#현재 설치되어 있는 패키지를 확인
search()
#패키지가 설치되는 경로 확인
.libPaths()
#패키지 설치 경로 변경
.libPaths("C:/Program Files/R/R-4.2.1/library")
#패키지 설치
install.packages("ggplot2")
#패키지와 R언어를 연결
library("ggplot2")
#패키지 업데이트
update.packages("ggplot2")
#패키지 삭제
remove.packages("ggplot2")
#패키지가 설치되어 있는 위치와 패키지 목록
searchpaths()
#header 옵션은 첫줄을 header로 사용할 것인지 결정
sep 옵션은 데이터를 어떤 것을 기준으로 구분할 것인지 결정
table = read.table(file = "절대경로", header = TRUE, sep=" ")
table = read.table(file = "경로", header = TRUE, sep=",")
setwd("파일 기초 경로 지정")
table2 <- read.csv("age2.csv")
table2
install.packages("readxl")
library(readxl)
# sheet가 여러개 일경우 sheet이름을 지정한다.
test = read_excel(path="C:/Users/km253/OneDrive/바탕 화면/Rlanguae/test.xls",
sheet = "test",
col_names = TRUE
)
library(ggplot2)
# 패키지에 저장되어있는 데이터
diamonds
# 각 변수의 빈도를 확인 할 수 있다.
table(diamonds$cut)
# 가시성을 좋기 하기 위해 sort를 이용하여 정렬한다.
# sort 함수의 decreasing 옵션은 내림차순 여부를 결정할 수 있다.
sort(table(diamonds$cut), decreasing = TRUE)
# 0과 1사이의 값으로 반환
prop.table(table(diamonds$cut))
#100을 곱하여 백분률로 표현
prop.table(table(diamonds$cut)) * 100
#round함수를 이용하여 반올림, digits 옵션은 몇 째자리에서 반올림 할 것인지 결정
round(prop.table(table(diamonds$cut))*100, digits = 2)
install.packages("prettyR")
library(prettyR)
# 패키지 내부의 freq 함수를 사용
# display.na = FALSE옵션은 결측값을 제외한다.
table = freq(diamonds$cut, display.na = FALSE)
table
# ylab : y축 제목, ylim : 눈금 범위 지정, main : 제목
barplot(table(diamonds$cut), col="blue",
ylab = "빈도",
xlab = "종류",
ylim = c(0,26000),
main = "limbest barchart"
)
#aes 함수는 x축 혹은 y축에 입력된 데이터이다.
ggplot(data = diamonds, mapping = aes(x = cut))+geom_bar()
# 원 그래프 표시
pie(table(diamonds$cut))
# 반지름을 최대로
pie(table(diamonds$cut), radius = 1)
# 시작하는 각도를 -30도로 지정
pie(table(diamonds$cut), radius = 1, init.angle = -30)
#히스토그램 작성
hist(diamonds$price)
# 지정한 구간 데이터로 히스토그램 작성
hist(diamonds$price, breaks = c(0,5000,10000,15000,20000))
# 아래와 같이 단위를 작성해도 됨
hist(diamonds$price, breaks = 10)
# boxplot
boxplot(diamonds$price)
# range 이상 값을 분석하기 위해서 사용
boxplot(diamonds$price, range = 3)
# 양적자료 + 질적자료
boxplot(diamonds$price ~ diamonds$cut)
x1 = 1:4
x2 = c(10,20,30,40)
x3 = c("m","f","m","f")
df = data.frame(x1, x2, x3)
str(df)
'data.frame' 은 데이터가 저장된 타입을 말하며, 4 obs는 행수를 의미한다.
또한 3 variables는 3개의 변수가 있다는 것을 말한다.
# 4개의 값을 한번에 봄
par(mfrow = c(2,2))
boxplot(Sepal.Length~Species, data = iris, main = "Sepal.Length")
boxplot(Sepal.Width~Species, data = iris, main = "Sepal.Width")
boxplot(Petal.Length~Species, data = iris, main = "Petal.Length")
boxplot(Petal.Width~Species, data = iris, main = "Petal.Width")
x1 = c(10,1,5,2,4,6,1,3,8)
x2 = c(82,94,88,90,87,84,91,87,93)
cor(x1, x2)
#상관관계 표를 만듦
plot(x1, x2, main = "상관관계 테스트")
# 붉은 선을 정의
abline(lm(x2~x1), col="red", lwd=2, lty=1)
par(mfrow=c(1,1))
month = 1:12
late = c(4,5,7,10,12,13,6,5,4,2,8,9)
#type 은 선 그래프의 종류를 의미
plot(month, late, main ="선그래프", type="l", lwd=2, xlab="월", ylab="횟수")
plot(month, late, main ="선그래프", type="b", lwd=2, xlab="월", ylab="횟수")
plot(month, late, main ="선그래프", type="s", lwd=2, xlab="월", ylab="횟수")
late2 = c(8,7,5,4,11,12,6,2,7,1,10,12)
plot(month, late, main ="선그래프", type="l", lwd=2, xlab="월", ylab="횟수")
# 선 추가하기
lines(month, late2, type="l", col="red")