월요일
Input 값 받아오기
- Input 값 받아오기
1 2 3 4 5
a = readline("Input any integer: ") a b = readline("Input two integer with comma (ex: 1,2) : ") strsplit(b,"[,]") as.numeric(unlist(strsplit(b,"[,]")))
readline
은 입력 값을 받아오는 함수이다. readline코드가 실행되면 콘솔창에 입력을 하면 해당 변수에 값이 저장된다. 이때strsplit
와 응용해서 사용하면 구분자로 입력이 가능하게 만들 수 있다. 당연히 저장값을 리스트이기 때문에 unlist와 as.numeric을 사용해야한다.데이터 파일 가져오기
- 데이터 파일 가져오기
1 2 3 4 5 6 7 8 9 10 11 12
x1 = scan(file = "input_noh.txt", what = numeric()); x1[1:5] x2 = scan(file = "input_noh.txt", what = character()); x2[2:5] x3 = scan(file = "input_noh.txt"); x3[1:5] x4 = scan(file = "input_h.txt", what = character()); x4[1:5] x = matrix(as.numeric(x4[-(1:2)]),ncol = 2,byrow = T) x[1:3,] dat = read.table(file = "input_noh.txt") dat2 = read.table(file = "input_noh.txt",header=T) dat3 = read.table(file = "input_h.txt",header = F) dat4 = read.table(file = "input_h.txt",header = T) dat5 = read.table(file = "input_h.txt",header = F, stringsAsFactors = F)
scan
명령어를 사용하면 file에 입력한 데이터를 가져올 수 있다. what에 입력한 타입의 형식으로 가져오는데, character()은 numeric()보다 더 많은 양의 데이터를 가져온다. 이때 하나의 유형만 불러올 수가 있다.read.table
도scan
처럼 파일의 데이터를 가져오는 명령어이다. 하지만 다른 점이라면 scan은 입력의 형식을 고려하지않고 1차원적으로 데이터를 가져온다. 하지만 read.table은 자료의 데이터 입력 형식을 고려해서 테이블 형태를 잡아서 가져온다. 그리고 scan과 다르게 여러 유형으로 저장이 가능하다.
데이터 파일 입력하기
- 데이터 파일 입력하기
1 2 3 4 5 6 7 8 9 10
write.table(dat,file = "test1.txt",row.names = T, col.names = T, quote = T, sep = "\t") write.table(dat,file = "test2.txt",row.names = F, col.names = F, quote = F,sep = "\n") write.table(dat,file = "test3.csv", sep=",") write.table(dat, file = "test4.txt", row.names = T,col.names = T, quote = T,sep = " ")
write.table
을 사용하면 데이터를 입력하여 저장할 수 있다. 파일 입출력과 같다고 보면된다. 구분자를 입력하면 해당 구분자로 데이터가 입력이 된다. 예를 들면 csv파일(comma-separated values)은 구분자를 ,로 해주면 된다.
목요일
read.xlsx
- read.xlsx
1 2 3 4 5 6 7
Sys.getenv('JAVA_HOME') Sys.setenv("JAVA_HOME"= '/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home') system("java -version") install.packages("xlsx") library(xlsx)
read.xlsx
는 함수의 이름 그대로 엑셀을 불러오는 함수이다. 이 함수를 쓰기 위해서는 Java가 깔려있어야한다. java version을 확인해주시고 요즘은 jdk가 14이상이 깔려있으니 그냥 진행하셔도 된다만…. Mac OSX를 쓰시는 분들은 에러가 나는 경우가 있다. 맥용 자바가 설치가 안되어 있으면install.packages("xlsx")
에서 에러가 발생한다. 이는 Mac OSX용 구버전 자바를 사용하면 해결이 된다. 이게 환경변수를 변경하면 다른 자바 프로그램들이 꼬여버릴 수가 있기때문에 설치 후 환경변수 설정해주시고 다시 jdk14를 설치하면 적용되면서 jdk를 상위 버전이 유지가 된다.
write.xlsx
- write.xlsx
1 2 3 4 5 6 7 8 9 10
write.xlsx(x1, file='test.xlsx', sheetName=as.character(1), col.names=T, row.names=F,append=F,showNA=F) write.xlsx(x1, file = 'test.xlsx', sheetName = as.character(2), col.names = T, row.names = F, append = T, showNA = F) for (i in 3:10) { write.xlsx(x1, file = 'test.xlsx', sheetName = as.character(i), col.names = T, row.names = F, append = T, showNA = F) }
엑셀파일을 쓰는 함수이다. 앞선에 언급한
read.table()
과 유사한 형태를 띄고 있다. 약간은 read.table과 scan을 합쳐놓은 느낌이다. 두 개의 특징을 어느정도 섞어놓았고 우리가 흔히 생각하는 엑셀파일의 형식을 가지고 파일이 만들어진다고 생각하면 된다.
dplyr
- dplyr
1 2
install.packages("dplyr") library(dplyr)
데이터 처리에 특화된 R 패키지이다. library에는 꽤 자주 사용하는 데이터 처리 및 분석 함수들이 있다.
filter(dataset, conditon1, condition2, ...)
지정한 조건식에 맞는 데이터를 추출한다. 보통 sample들을 필터링할 때 자주 사용하고 행 중심의 데이터 처리와 정리를 다룬다.select(dataset, var1, -var2, ...)
특정 데이터 셋에서 선택 변수들을 추출한다. 제외할 수도 있다. filter가 행 중심의 데이터 추출이라면 select는 열 중심의 데이터 추출 방식이다. 보통 여러가지 변수를 추출할 때는 제외하는 열만 적는게 의미가 있다.mutate(dataset, var_name=expression, ...)
데이터 셋에서 새 변수를 정의해서 추가한다.arrange(dataset, var1, desc(var2))
데이터 셋을 변수에 따라 오름차순으로 정렬해준다. desc를 써주면 당연히 해당 데이터셋에 대해서는 내림차순으로 정렬해준다. 아마 먼저 적은 변수를 기준으로 동일 데이터 값이면 후순위에 적은 기준으로 정렬하는 것 같다.summarize(dataset, name1=func())
데이터 셋에서 특정 함수에 대해서 데이터를 집계해준다. 반환 형은 1개의 행값을 갖는 데이터 프레임이다. 보통 특정 데이터를 가진 상태에서 평균, 분산과 같은 값을 새로 데이터에 추가할 때 많이 사용한다.group_by(dataset, variable)
데이터 셋을 그룹화 시켜준다. 지정한 variable을 기준으로 그룹화가 진행된다. 보통 데이터 처리 초반에 많이 쓰는 편이다.- pipe(%>%) pipe는 함수라기 보단 연산자?라고 보면된다. 계속해서 할당연산자를 주면서 코딩을 하면 눈에 잘 들어오지 않는 경우가 많다. 이때 pipe를 쓰면 하나의 데이터에 어떤 데이터 처리과정을 순차적으로 진행했는지를 알 수 있다. 그리고 좀 더 간편하게 볼 수 있다.
결측값 확인
- 결측값 확인
1 2 3 4 5
is.na(x) sum(is.na(x)) which(is.na(x)) which(is.na(x),arr.ind = T) which(is.na(x),T)
데이터라는 것에서 가장 중요한 것은 중복과 결측치이다. 결측치는 데이터를 처리해서 정리했을 때 오차를 발생시키는 대표적인 문제 값들이다. 그래서 보통 결측치가 존재하는 지를 확인하고 해당 결측치를 평균 값으로 대체하거나 제외시키는 결측치 보정방법들이 존재한다. 이를 위해서 우선 결측치들을 확인해야하는데, 이때 쓰는 함수가
is.na()
이다. 해당 값이 결측치(NA)면 T, 아니면 F를 반환해준다. 보통 sum과 병행해서 전체 결측치의 개수를 알아내거나 which를 병행해서 결측치 위치들을 알아내서 대체할 때 많이 사용한다.
Comments powered by Disqus.