내용 |
# 벡터, 리스트 : 1차원
# 한 줄로 나열된 데이터
# 차이점 : 벡터는 모두 같은 타입여야 함
rm(list=ls())
x <- c(1,2,3)
y <- c(TRUE, FALSE)
z <- c("Hello", "World", "Nice")
data <- c(x,y,z)
data # 결과는 모두 문자열
list_data <- list(x, y, z)
list_data
data[2]
data[-2]
data[c(1,3,5,7)]
data[-c(1,3,5,7)]
list_data[1] #리스트를 반환
list_data[[1> # 벡터를 반환
list_data[-1] # 가능합니다.
list_data[[-1> # 안됩니다.
# 2차원 구조를 갖는 데이터
# matrix(행렬), data.frame(데이터프레임)
cm <- matrix(1:15, nrow=5, ncol=3)
cm
cm[1,]
cm[,2]
cm[-1,]
rm <- matrix(1:15, nrow=5, ncol=3, byrow=TRUE)
rm
#행렬의 연산
# 행렬의 덧셈, 뺄셈, +, -
# 행렬의 곱 %*%
# 전치행렬 t()
# 역행렬 solve()
# rm 에서 1,2,5 행을 출력하세요.
rm[c(1,2,5),]
# rm 에서 3행을 제외한 행의 1열, 2열을 출력하세요.
rm[-3, c(1,3)]
rm[1,2] # 1행 2열 출력, #벡터
rm[1,]
rm[,1]
rm[1, 2, drop=FALSE]
#solve() : 역행렬을 구합니다.
#역행렬을 이용하면 선형 방정식을 풀 수 있다.
#샘플 데이터
rm(list=ls())
x <- c(32, 64, 96, 118, 126, 144, 152.5, 158)
y <- c(18, 24, 61.5, 49, 52, 105, 130.3, 125)
plot(x, y)
X <- matrix(c(x, rep(1, NROW(x))), ncol=2)
X
Y <- matrix(y, ncol=1)
Y
ab <- solve( t(X) %*% X ) %*% t(X) %*% Y
ab
lines(x, (x*ab[1] + ab[2]))
# 정방행렬이 아닌 행렬의 역행렬을 구하려면...
#((X의 전치행렬 * X 행렬)의 역행렬) * X의 전치행렬
# 회귀식을 구하려면... 행렬 이용 하지 않습니다.
# Linear regression model
# lm(포뮬러) 포뮬러식은 종속변수 ~ 독립변수
lm(y ~ x)
ab
# 급여 구하는 문제.
(pay <- c(12000, 26000, 18000))
(paymatrix <- matrix(pay, ncol=length(pay)))
worker1 <- c(5, 4, 9)
worker2 <- c(7, 3, 2)
(workers <- c(worker1, worker2))
(workermatrix <- matrix(workers, ncol=2))
paymatrix %*% workermatrix
##################
# 1. R 환경을 구성할 수 있는가?
# 2. 변수를 선언하고 출력할 수 있는가?
# 3. 벡터, 리스트를 구분 할 수 있는가?
# 4. 벡터를 정의하고 부분 데이터를 출력할 수 있는가?
# 5. 벡터를 이용하여 새로운 벡터를 만들 수 있는가?
# 6. 리스트를 정의할 수 있는가?
# 7. 리스트의 부분집합을 출력할 수 있는가?
# 8. 행렬을 정의할 수 있는가?
# 9. 행렬의 곱을 계산할 수 있는가?
# 10. 역행렬과 전치행렬의 개념을 이해하고 있는가?
# Array 배열, 3차원 구조를 정의할 때 사용, 모든 데이터가 같은 타입여야 함
# array(data, dim=c(행, 열, 면))
dataArray <- array(1:24, dim=c(3,4,2))
dataArray
list_data <- list(c(1,2,3), c(TRUE, FALSE))
list_data
unlist(list_data)
# attr() attribute의 약어, 함수의 속성을 변경
attr(dataArray, "dim") <- c(3, 8)
class(dataArray)
dataArray
# data.frame 데이터 프레임, 엑셀 시트
# data.frame()로 데이터 프레임을 생성
# 가장 많이 사용하는 데이터 구조
# csv 파일을 읽어 처리할 때,
student.name <- c("Jin", "Eric", "Den", "Kei")
student.eng <- c(60, 85, 90, 95)
student.kor <- c(70, 90, 85, 90)
student_data <- data.frame(student.name, student.eng, student.kor)
student_data
str(student_data)
student_data$student.math <- c(80, 90, 70, 90)
student_data
student_data$student.math <- NULL
student_data
student_data$student.name
class(student_data$student.name)
student_data$student.name <- as.character(student_data$student.name)
class(student_data$student.name)
names(student_data) #열 이름 출력
names(student_data) <- c("Name", "Eng", "Kor") #열이름 변경
# 데이터프레임에서 중요한 것은...
# 데이터프레임의 구조를 변경하고, 부분집합을 생성하는 것
#데이터 프레임을 합치는 것이 중요하다.
#cbind(), rbind()
#cbind() 열 단위 병합
# 학생 데이터프레임에 학생 번호를 추가
# 학생번호를 갖는 데이터프레임을 생성후 학생데이터와 병합
student.no <- data.frame(1:NROW(student_data$Name))
student.no
names(student.no) <- c("No")
student.no
#student.no 데이터프레임과 student_data 데이터프레임을 병합
student_data <- cbind(student.no, student_data)
student_data
#데이터프레임에서 부분 데이터 셋 조회
student_data$Eng
student_data[, 3]
student_data[, -3]
#번호 열을 가장 마직막 열로 옮기세요.
student_data[, 1]
student_data[, -1]
cbind(student_data[, -1], student_data[, 1])
student_data[, c(1,3,4)]
student_data[, c(2,4)]
student_data[, -c(2,4)]
#subset() 함수로 부분 데이터셋 조회
?subset
subset(student_data, student_data$Kor >= 90)
subset(student_data, select=c(2,3,4))
subset(student_data, select=c(2,3,4),
student_data$Kor >= 90)
subset(student_data, select=c(2,3,4),
subset=(student_data$Kor >= 90))
#상위 또는 하위 일 부 행 조회
head(student_data) #상위 6개 행 조회
student_data
head(student_data, n=2)
tail(student_data, n=2)
edit(student_data)
student_data
temp <- edit(student_data) #권장 안함
temp
student_data <- temp
rm(temp)
#데이터타입을 확인 해야 합니다.
class(iris)
is.data.frame(iris)
is.character(student_data$Name)
head(iris)
names(iris)
nrow(iris)
ncol(iris)
str(iris)
|