내용

글번호 765
작성자 heojk
작성일 2017-10-15 19:09:44
제목 R day2 실습
내용 # 벡터, 리스트 : 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)