데이터분석 전문가(ADP)를 위한 R프로그래밍 기초편3
1. scan
scan('파일이름')을 통해 단순한 벡터 형태의 파일을 읽어들인다
> scan('/cloud/project/file.txt')
Read 3 items
[1] 123 4 5
2. read.csv
read.csv('파일이름', header=T, stringsAsFactors=, as.is=, na.strings=)를 통해 CSV 파일을 읽는다
header=T를 하면 맨 첫줄을 변수명으로 인식함
> student <- read.csv('student_information.csv', header=T)
> str(student)
'data.frame': 7 obs. of 5 variables:
$ Name : chr "Jane" "Julia" "Tom" "Mike" ...
$ Age : int 21 22 25 22 23 21 26
$ Height : int 168 157 178 182 170 167 172
$ StudentID: int 201721637 201653422 201424211 201783421 201721342 201921257 201243212
$ Grade : chr "A" "A+" "B" "B-" ...
stringsAsFactors=T라 하면 string을 factor로 인식함
디폴트는 위에서 보다시피 stringsAsFactors=F
반대로 as.is=T라 하면 string을 character로 인식함
디폴트는 위에서 보다시피 chatacter로 인식하고 있으니까 as.is=T
> student <- read.csv('student_information.csv', header=T,stringsAsFactors=T)
> str(student)
'data.frame': 7 obs. of 5 variables:
$ Name : Factor w/ 7 levels "Bin","Jane","Julia",..: 2 3 7 5 4 6 1
$ Age : int 21 22 25 22 23 21 26
$ Height : int 168 157 178 182 170 167 172
$ StudentID: int 201721637 201653422 201424211 201783421 201721342 201921257 201243212
$ Grade : Factor w/ 6 levels "A","A+","B","B-",..: 1 2 3 4 1 5 6
> student <- read.csv('student_information.csv', header=T,as.is=F)
> str(student)
'data.frame': 7 obs. of 5 variables:
$ Name : Factor w/ 7 levels "Bin","Jane","Julia",..: 2 3 7 5 4 6 1
$ Age : int 21 22 25 22 23 21 26
$ Height : int 168 157 178 182 170 167 172
$ StudentID: int 201721637 201653422 201424211 201783421 201721342 201921257 201243212
$ Grade : Factor w/ 6 levels "A","A+","B","B-",..: 1 2 3 4 1 5 6
na.strings=은 데이터 내에서 어떤 문자열을 결측치로 인식할지 지정해줌
> mytxt <- read.csv('mytxt.txt', header=F)
> mytxt
V1 V2 V3
1 1 2 nanana
2 3 4 5
> mytxt <- read.csv('mytxt.txt', header=F, na.strings='nanana')
> mytxt
V1 V2 V3
1 1 2 NA
2 3 4 5
3. read.table
read.table('파일이름', sep='구분자')는 table형태로 된 데이터를 읽는 함수
구분자를 반드시 지정해야함
sep=','로 하면 CSV 파일을 읽는 read.csv()함수와 동일하게 csv 파일을 읽어온다
> student_table <- read.table('student_information.csv', header=T, sep=',')
> student_table
Name Age Height StudentID Grade
1 Jane 21 168 201721637 A
2 Julia 22 157 201653422 A+
3 Tom 25 178 201424211 B
4 Mike 22 182 201783421 B-
5 Lily 23 170 201721342 A
6 rose 21 167 201921257 C
7 Bin 26 172 201243212 D
> str(student_table)
'data.frame': 7 obs. of 5 variables:
$ Name : chr "Jane" "Julia" "Tom" "Mike" ...
$ Age : int 21 22 25 22 23 21 26
$ Height : int 168 157 178 182 170 167 172
$ StudentID: int 201721637 201653422 201424211 201783421 201721342 201921257 201243212
$ Grade : chr "A" "A+" "B" "B-" ...
read.csv와 read.table는 웹 링크로 된 데이터 파일을 읽어올 수 있다
> web <- read.csv('https://raw.githubusercontent.com/reisanar/datasets/master/RidingMowers.csv')
> head(web)
Income Lot_Size Ownership
1 60.0 18.4 Owner
2 85.5 16.8 Owner
3 64.8 21.6 Owner
4 61.5 20.8 Owner
5 87.0 23.6 Owner
6 110.1 19.2 Owner
> web2 <- read.table('https://raw.githubusercontent.com/reisanar/datasets/master/RidingMowers.csv')
> head(web2)
V1
1 Income,Lot_Size,Ownership
2 60,18.4,Owner
3 85.5,16.8,Owner
4 64.8,21.6,Owner
5 61.5,20.8,Owner
6 87,23.6,Owner
4. write.csv
write.csv(데이터프레임, '파일이름', row.names=)로 데이터프레임을 csv 파일로 출력함
> student
Name Age Height StudentID Grade
1 Jane 21 168 201721637 A
2 Julia 22 157 201653422 A+
3 Tom 25 178 201424211 B
4 Mike 22 182 201783421 B-
5 Lily 23 170 201721342 A
6 rose 21 167 201921257 C
7 Bin 26 172 201243212 D
> write.csv(student, 'student.csv')
row.names=T(디폴트)를 하면 index가 생성됨
> write.csv(student, 'student.csv',row.names=T)
"","Name","Age","Height","StudentID","Grade"
"1","Jane",21,168,201721637,"A"
"2","Julia",22,157,201653422,"A+"
"3","Tom",25,178,201424211,"B"
"4","Mike",22,182,201783421,"B-"
"5","Lily",23,170,201721342,"A"
"6","rose",21,167,201921257,"C"
"7","Bin",26,172,201243212,"D"
> write.csv(student, 'student.csv',row.names=F)
"Name","Age","Height","StudentID","Grade"
"Jane",21,168,201721637,"A"
"Julia",22,157,201653422,"A+"
"Tom",25,178,201424211,"B"
"Mike",22,182,201783421,"B-"
"Lily",23,170,201721342,"A"
"rose",21,167,201921257,"C"
"Bin",26,172,201243212,"D"
보통 1행을 자동적으로 변수명으로 인식해서 써주지만
1행이 변수명이 아니고 데이터라면
write.table(데이터프레임, '파일이름', col.names=F)를 사용
write.csv()는 col.names가 에러남
> write.table(mytxt, 'mytxt.csv',row.names=F)
"V1" "V2" "V3"
1 2 NA
3 4 5
> write.table(mytxt, 'mytxt.csv',col.names=F,row.names=F)
1 2 NA
3 4 5
5. read.fwf
fixed-width file의 약자
고정된 간격의 파일을 읽는 함수
read.fwf('파일이름', widths = c(w1,w2,w3,....,wn)
예를 들어 위와 같은 파일이 fwf 파일이라고 할 수 있다
고정된 간격이 2칸, 3칸, 4칸씩 끊어서 변수 3개에 집어넣으면 된다
> myfwf <- read.fwf('myfwf.txt', widths=c(2,3,4))
> myfwf
V1 V2 V3
1 11 222 3333
2 aa bbb cccc
3 dd eee hhhh
6. 파일 목록
list.files()로 현재 디렉토리의 파일 목록을 볼 수 있다
> list.files()
[1] "file.txt" "myfwf.txt" "mytext.csv" "mytxt.csv"
[5] "mytxt.txt" "project.Rproj" "student_information.csv" "student.csv"
7. 출력할 내용의 자리수
R은 부동소수점을 기본 7자리로 표현
자리수를 출력함수에서 digits=으로 직접 지정할 수 있음
> print(pi)
[1] 3.141593
> print(pi,digits=3)
[1] 3.14
> cat(format(pi,digits=3))
3.14
> options(digits=3)
> print(pi)
[1] 3.14
8. 데이터 입력
데이터 양이 적으면 c()함수를 이용하여 직접 입력할 수도 있음
혹은 RStudio에서 지원하는? 데이터 편집기를 이용
> data <- c(200, 210, 180, 190, 185, 170, 180, 180, 210, 180, 183, 191, 204, 201, 186)
> data
[1] 200 210 180 190 185 170 180 180 210 180 183 191 204 201 186
9.파일에 내용 출력하기
sink('파일이름')
출력내용
sink()
를 이용하여 특정 파일에 <출력내용>을 출력시킬 수 있음
> sink('mytext.csv')
> 3.141593
> sink()
혹은 cat('출력내용', file='파일이름', append=)를 이용
append=T를 하면 원래 내용에 추가를 하고 append=F를 하면 원래 내용을 지우고 <출력내용>만 출력해줌
> cat('111111.1111111', file='mytext.csv', append=T)
> cat('111111.11111112222222222222222', file='mytext.csv', append=F)
10. 파일 위치
R에서는 파일 위치를 \\나 /를 이용하여 구분
\을 사용하면 인식하지 못함
> scan('\cloud\project\file.txt')
Error: '\c' is an unrecognized escape in character string starting "'\c"
> scan('\\cloud\\project\\file.txt')
Error in file(file, "r") : cannot open the connection
In addition: Warning message:
In file(file, "r") :
cannot open file '\cloud\project\file.txt': No such file or directory
> scan('/cloud/project/file.txt')
Read 3 items
[1] 123 4 5
\\은 에러나고 /이 읽히는데?? 책이 잘못된건가
11. 기타
XML 라이브러리로 HTML 파일도 읽어올 수 있다
참고
https://thestoryofcosmetics.tistory.com/43
https://rbasall.tistory.com/66
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=heehow&logNo=140171599873
https://rfriend.tistory.com/24
https://m.blog.naver.com/pmw9440/221822708757
'프로그래밍 > R 프로그래밍' 카테고리의 다른 글
데이터분석 전문가(ADP)를 위한 R프로그래밍 기초편5 (0) | 2022.02.08 |
---|---|
데이터분석 전문가(ADP)를 위한 R프로그래밍 기초편4 (0) | 2022.02.06 |
데이터분석 전문가(ADP)를 위한 R프로그래밍 기초편2 (0) | 2022.01.31 |
데이터분석 전문가(ADP)를 위한 R프로그래밍 기초편1 (0) | 2022.01.31 |
코딩테스트를 위한 R 기초 벼락치기 (0) | 2021.10.30 |