데이터분석 전문가(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

 

[R프로그래밍]-입력과 출력의 모든 것(scan,readline,print,cat,read.table, read.csv, write.table, write.csv 함수)

안녕하세요 여러분! 저번시간까지 우리는 R의 데이터 타입을 배우면서 열심히 달려왔습니다!! 이번 포스팅에서는 'R의 입력과 출력', 그 모든 것!에 대해서 다뤄보려고 합니다! 먼저 기본 입출력

thestoryofcosmetics.tistory.com

 

https://rbasall.tistory.com/66

 

R에서 csv(콤마 구분 데이터)파일 불러오는 방법, read.csv()

R에서 csv(콤마 구분 데이터)파일 불러오는 방법, read.csv() csv파일은 comma-separated values 의 약자입니다. 콤마 즉 , 기호로 구분된 값이라는 뜻입니다. 메모장파일을 하나 만들어봅시다. 메모장의 경

rbasall.tistory.com

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=heehow&logNo=140171599873 

 

R write.csv col.names error

R 에서 data.frame 의 데이터를 csv 형식으로 저장하려고 할 때, row.names 를 제거하는 것은 문제가 없으...

blog.naver.com

 

https://rfriend.tistory.com/24

 

R read.fwf() : 일정한 간격, 고정된 구조의 외부데이터 불러오기

엑셀에서 외부 텍스트 데이터를 불러올 때 (1) ',', ':', ' ' 등의 구분자로 column을 구분하는 방식이 있고, (2) 일정한 간격, 고정된 폭으로 되어 있어서 대화상자에서 구분하는 폭/선을 마우스로 지

rfriend.tistory.com

 

https://m.blog.naver.com/pmw9440/221822708757

 

1.1.4 R에서 웹페이지의 csv 데이터 불러오기

0. 차례 1. 들어가기 2. read.csv() 함수로 웹페이지 데이터 불러오기 3. 요약 4. 참고자료(Reference) 1....

blog.naver.com

 

 

TAGS.

Comments