v1 <- c(1, 2, 3)
v2 <- c(4, 5, 6)
v1; v2
#> [1] 1 2 3
#> [1] 4 5 6
v3 <- c(v1, v2)
v3
#> [1] 1 2 3 4 5 6
# seq() 연속값
var1 <- c(1:6) # 1~6까지의 연속 값
var2 <- seq(1, 6) # 1~6까지의 연속 값
var1; var2
#> [1] 1 2 3 4 5 6
#> [1] 1 2 3 4 5 6
var3 <- seq(1, 6, by = 2) # 1~10까지 2간격의 연속값
var4 <- seq(1, 6, by = 3) # 1~10까지 3간격의 연속값
var5 <- seq(from = 1, to = 2, length.out = 5)
var3; var4; var5
#> [1] 1 3 5
#> [1] 1 4
#> [1] 1.00 1.25 1.50 1.75 2.00
# rep() 반복값
var6 <- rep(3, times = 5) # 5를 7번 반복
var7 <- rep(c("a", "b"), each = 3) # 각 문자 3번 반복
var6; var7
#> [1] 3 3 3 3 3
#> [1] "a" "a" "a" "b" "b" "b"
# names() 값마다 이름 부여
mbti <- c("INFP", "ENTP", "ESFP")
names(mbti) <- c("김땡땡", "문땡땡", "박땡땡")
# mbti <- c(김땡땡="INFP",문땡땡= "ENTP",박땡땡="ESFP") 와 동일
mbti
# 김땡땡 문땡땡 박땡땡
# "INFP" "ENTP" "ESFP"
# 이름으로 추출
mbti["김땡땡"] #> 김땡땡 "INFP"
# 특정 위치 요소 추출
v <- c(11, 12, 13, 14, 15)
v[2:3] #> [1] 12 13
v[c(1,2,4)] #> [1] 11 12 14
v[seq(1, 5, 2)] #> [1] 11 13 15
# - 기호로 요소 제외
v[-2] #> [1] 11 13 14 15
v[-c(3:4)] #> [1] 11 12 15
# 조건으로 추출
s <- c(3, 1, 5, 9, 7, 10)
s[s>=7] #> [1] 9 7 10
subset(s, s>=7) #> [1] 9 7 10
# s>=7인 요소의 인덱스 추출
which(s>=7) #> [1] 4 5 6
v <- c(11, 12, 13, 14, 15)
v - mean(v) #> [1] -2 -1 0 1 2
sum(v) #> 65
w <- c(1, 2, 3, 4, 5)
sqrt(w) # [1] 1.00 1.41 1.73 2.00 2.24
# ncol : 열의 수, nrow : 행의 수
m1 <- matrix(1:12, ncol = 3)
m1
#> [,1] [,2] [,3]
#> [1,] 1 5 9
#> [2,] 2 6 10
#> [3,] 3 7 11
#> [4,] 4 8 12
# byrow = TRUE : row로 채워짐
m2 <- matrix(data = c(1:6), nrow = 2, byrow = TRUE)
m2
#> [,1] [,2] [,3]
#> [1,] 1 2 3
#> [2,] 11 12 13
# cbind() 열 병합, rbind() 행 병합
# 숫자 벡터 생성
first <- c(1,2,3,4)
second <- c(5,6,7,8)
third <- c(9,10,11,12)
# 열 기준으로 벡터 병합
m3 <- cbind(first, second, third)
m3
#> first second third
#> [1,] 1 5 9
#> [2,] 2 6 10
#> [3,] 3 7 11
#> [4,] 4 8 12
#행 기준으로 벡터 병합
m4 <- rbind(first, second, third)
m4
# [,1] [,2] [,3] [,4]
#first 1 2 3 4
#second 5 6 7 8
#third 9 10 11 12
rownames(m3) <- c("행1", "행2", "행3", "행4", "행5")
colnames(m3) <- c("열1", "열2", "열3")
m3
#> 열1 열2 열3
#> 행1 5 2 7
#> 행2 6 4 3
#> 행3 7 5 4
#> 행4 8 9 8
#> 행5 9 8 7
m4 <- matrix(
data = c(1,2,3, 11,12,13),
nrow = 2, byrow = TRUE,
dimnames = list(c("행1", "행2"), c("열1", "열2", "열3"))
)
m4
#> 열1 열2 열3
#> 행1 1 2 3
#> 행2 11 12 13
t(m) # 행렬 전치
nrow(m) # 행 개수
ncol(m) # 열 개수
dim(m) # 행렬 개수
m[2,] # 2번째 행 요소 추출
m[2,3] # 2행 3열 요소 추출
m[1:5,] # 1-5번째 행 요소 추출
m[c(2,4),] # 2,4번째 행 요소 추출
m[,"열1"] # 열1 추출
m["행3",] # 행3 추출
m[-2, -2] # 2행 2열 제외
col3 <- m[, 3]
m[col3 >= 5,] # 3열의 값이 5이상인 경우 추출
m[m>1] # 1보다 큰 수 모두 추출
mm[mm < 10] <- 0 # mm에서 10보다 작은 수 0으로 수정
mm[2, 2] <- 9 # mm에서 2행2열의 값 9로 수정
m1 * 2 # 모든 값에 x 2
log2(m1) # 모든 값에 log2 취함
rowSums(m3)
colSums(m3)
diz <- factor(c("양성", "음성", "음성", "양성", "양성"))
diz
# [1] 양성 음성 음성 양성 양성
# Levels: 양성 음성
sex <- c("여성", "남성", "여성")
sex <- factor(sex, levels = c("여성", "남성"))
sex
# [1] 여성 남성 여성
# Levels: 여성 남성
# level 추가
levels(diz) <- c(levels(diz), "악성")
diz[1] <- "악성"
diz
# [1] 악성 음성 음성 양성 양성
# Levels: 양성 음성 악성
: 2차원 이상의 구조, 행렬을 쌓은 구조, 행렬 문법과 거의 유사함.
#
arr1 <- array(1:24, dim = c(3, 4, 2))
arr1
# , , 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
# data, dim, dimnames
arr2 <- array(data=1:12, dim = c(2, 3, 2), dimnames = list(c("x1","x2"), c("y1","y2","y3"), c("z1","z2")))
arr2
# , , z1
#
# y1 y2 y3
# x1 1 3 5
# x2 2 4 6
#
# , , z2
#
# y1 y2 y3
# x1 7 9 11
# x2 8 10 12
arr2[,,"z1"] # z1 요소 추출
# y1 y2 y3
# x1 1 3 5
# x2 2 4 6
library(MASS)
df <- Boston
str(df) # 데이터 프레임 구조
# 'data.frame': 506 obs. of 14 variables:
# $ crim : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...
# $ zn : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ..
..
nrow(df) # 506
ncol(df) # 14
length(df) # 14
names(df) # 컬럼명 추출
summary(df) # 데이터프레임 각 변수별 요약
colMeans(df) # 컬럼별 평균
# 첫번째 열 추출
df$crim
df[,"crim"]
df[,1]
# 특정 행 추출
df[1:3,] # 1-3번째 행
# 특정 데이터 추출
df[2,"crim"]
df$crim[2]
df[2,1]
# 제외
df[, -1] # 첫번째 열 제외
# 조건
df[df$crim < 0.1, ]
crim01 <- df$crim < 0.1
cols <- c("crim", "medv")
df[crim01, cols]
subset(df, crim < 0.1)
subset(df, crim < 0.1, select = -(zn)) # zm컬럼 제외
# 수정
df$age[2] <- 29
df[3, "score"] <- 95
# 행추가
new_data <- list("김땡땡", 26, "여", 97)
df <- rbind(df, new_data)
# 열추가
df$salary <- c(220, 180, 250, 170, 220, 270, 250, 290, 210)
or
salary2 <- c(220, 180, 250, 170, 220, 270, 250, 290, 210)
df <- cbind(df, salary2)
# 행 삭제
df <- df[!df$score < 80, ] # score 80이하인 행 삭제
# 열 삭제
df$salary3 <- NULL # salary3 열 삭제
df <- df[, -(1:3)] # 1~3번째 열 제외