R-Studio IO의 사용.

R-Studio의 IO를 통해 파일 입출력 제어.

Featured image

R-Studio 의 IO

데이터 입출력을 위한 IO

사용 함수

이름 연산자 이름 사용법
read.csv read.csv read.csv(“경로”)
read.xlxs read.xlxs read.xlxs(“경로”)
read.table read.table read.table(“경로”)


파일 소스

우클릭 -> 다른이름으로 링크저장 이용해 주세요
R정형데이터처리하기.xlxs

vegetable2.txt

jumsu.txt

member01.txt

member02.txt

member03.txt

member04.txt

함수 예제

# 편집기 만듬
print("edit 편집기")
[1] "edit 편집기"
df <- data.frame()
df <- edit(df) # 편집기 만듬.
df
# 열의 개수가 0이고 행의 개수가 0인 데이터 프레임입니다.

# 로컬 파일 가져올댄 read.table() 이용
# file="경로명/파일명" sep="컬럼 구분자"(공백이거나 탭인 경우 안적어도됨.), header="T 또는 F"(없으면 V로 보임임)
jumsu <- read.table(file="jumsu.txt", header = T)
# jumsu <- read.table(file="jumsu.txt", header = T, col.names = c("이름", "국어", "영어", "수학"))
jumsu
#   학번 국어 수학 영어
# 1    1    8    7    2
# 2    2    6    5    7
# 3    3    9    4    9
# 4    4    4    5    7
# 5    5    5    8    9
str(jumsu)
# 'data.frame':	5 obs. of  4 variables:
#  $ 학번: int  1 2 3 4 5
#  $ 국어: int  8 6 9 4 5
#  $ 수학: int  7 5 4 5 8
#  $ 영어: int  2 7 9 7 9
# colnames(jumsu) <- c("이름", "국어", "영어", "수학") # 열 이름 바꿈

#파생 컬럼 만들기 : 코딩 변경(re-coding):리코딩
jumsu$총점 <- jumsu$국어+jumsu$수학+jumsu$영어
jumsu
#   학번 국어 수학 영어 총점
# 1    1    8    7    2   17
# 2    2    6    5    7   18
# 3    3    9    4    9   22
# 4    4    4    5    7   16
# 5    5    5    8    9   22

# 평균 컬럼은 소숫점 2자리
jumsu$평균 <- round(jumsu$총점 / 3, 2)
jumsu
#   학번 국어 수학 영어 총점 평균
# 1    1    8    7    2   17 5.67
# 2    2    6    5    7   18 6.00
# 3    3    9    4    9   22 7.33
# 4    4    4    5    7   16 5.33
# 5    5    5    8    9   22 7.33

jumsu$"합격_여부" <- ifelse(jumsu$평균>=6.0, "합격", "불합격")

# 행이름 바꾸기
row.names(jumsu) <- c("kang", "hong", "soo", "shin", "lee")
jumsu
#      학번 국어 수학 영어 총점 평균 합격_여부
# kang    1    8    7    2   17 5.67    불합격
# hong    2    6    5    7   18 6.00      합격
# soo     3    9    4    9   22 7.33      합격
# shin    4    4    5    7   16 5.33    불합격
# lee     5    5    8    9   22 7.33      합격

# quote:출력 데이터파일에 따옴표 씌울건지 안씌울건지(문자만)
write.csv(jumsu, "result1.csv", row.names = T, quote = T)

member01 <- read.table(file = "member01.txt", header = F)
member01
#    V1     V2  V3 V4
# 1 100 홍길동 170 60
# 2 200 이승엽 180 65
# 3 300 김정식 185 70
# 4 400 박남정 180 75
 
# getter
colnames(member01)
[1] "V1" "V2" "V3" "V4"
rownames(member01)
[1] "1" "2" "3" "4"

# setter
colnames(member01) <- c("번호", "이름", "키", "몸무게")
rownames(member01) <- c("hong", "lee", "kim", "park")
member01
#      번호   이름  키 몸무게
# hong  100 홍길동 170     60
# lee   200 이승엽 180     65
# kim   300 김정식 185     70
# park  400 박남정 180     75

# 테이블로 불러오고 구분자는 탭 시퀀스
member02 <- read.table(file="member02.txt", sep='\t', header = T)
member02
#   번호   이름  키 몸무게
# 1  100 홍길동 170     60
# 2  200 이승엽 180     65
# 3  300 김정식 185     70
# 4  400 박남정 180     75

# file chooser 사용.
# 아무 파일이나 불러와보기.
mydata <- read.table(file.choose(), header = T)
Error in file.choose() : file choice cancelled
mydata

# 3번 4번 파일 열기
member03 <- read.table(file = "member03.txt", sep=';', header = T)
member03
#   번호   이름  키 몸무게
# 1  100 홍길동 170     60
# 2  200 이승엽 180     65
# 3  300 김정식 185     70
# 4  400 박남정 180     75

# 없는 값 표시를 NA 로 바꿔주기
member04 <- read.table(file = "member04.txt", header = T, na.strings = "-")
member04
#   번호   이름  키 몸무게
# 1  100 홍길동  NA     60
# 2  200 이승엽 180     65
# 3  300 김정식 185     NA
# 4  400 박남정 180     75

# 데이타 프레임 만들기
name <- c("김유신", "이순신")
kor <- c(10, 20)
eng <- c(30, 30)
math <- c(50, 60)

sungjuk <- data.frame(name, kor, eng, math)
sungjuk
    name kor eng math
# 1 김유신  10  30   50
# 2 이순신  20  30   60

data <- c(10, 20)
data
[1] 10 20

# java의 log와 같음
sink("abcd.txt")
sungjuk
data
sink()

vegetable <- read.table("vegetable.txt", header = T)
vegetable
#   no   name price qty
# 1  1   감자   300   5
# 2  2 고구마  1100   2
# 3  3   오이  1100   7
# 4  4   가지   100   9

# 주석 제거 해주기.
# colname 변수로 컬럼 벡터 만들고 테이블에 넣음.
# col.names = colname 부분
colname <- c("no", "name", "price", "qty")
vegetable2 <- read.table("vegetable2.txt", header = F, col.names = colname)
vegetable2
#   no   name price qty
# 1  1   감자   300   6
# 2  2 고구마  1100   2
# 3  3   오이  1100   7
# 4  4   가지   100   9

# skip옵션
# 주위 : 주석도 skip 옵션에 행으로 포함
colname <- c("no", "name", "price", "qty")
vegetable2 <- read.table("vegetable2.txt", header = F, col.names = colname, skip = 2)
vegetable2
#   no   name price qty
# 1  2 고구마  1100   2
# 2  3   오이  1100   7
# 3  4   가지   100   9

# 출력 행을 제한 할 수 있다.
# nrows
colname <- c("no", "name", "price", "qty")
vegetable2 <- read.table("vegetable2.txt", header = F, col.names = colname, nrows = 2)
vegetable2
#   no   name price qty
# 1  1   감자   300   6
# 2  2 고구마  1100   2

# R정형 데이타 처리하기.xlsx
# xlsx 가져오기
# install.packages("xlsx")
library(xlsx)
# rjava 에러뜨면 Sys.setenv(JAVA_HOME = "path") 설정후
# library(rJava) 로 다시 불러오기

myEncoding <- "UTF-8"
filename <- "R정형데이터처리하기.xlsx"

income <- read.xlsx(file=filename, sheetIndex = 1, encoding = myEncoding)
income
#     수입업체     식품명       수입국 수입월 수입량.t. 수입가.t. 판매가.t.
# 1   한종무역       커피   에티오피아    5월      7000  22650000  31710000
# 2   대망식품 원당(설탕)         인도    6월     12000  15850000  22190000
# 3   세계식품     코코아 코트디부아르    5월      8000  17500000  24500000
# 4   망오통상 오렌지주스         미국    6월     10000  16800000  23520000
# 5 쿠키코리아       쿠키     이탈리아    5월      6000  26500000  37100000
# 6 유기농식품     견과류         터키    6월     10000  17000000  23800000
# 7   슈가무역       사탕         영국    5월      5000  19740000  27636000
# 8   전문통상     초콜릿       스위스    5월      8000  23050000  32270000
# 9   맛나식품     건과일         태국    5월      7000  18500000  25900000

business <- read.xlsx(file=filename, sheetIndex = 2, encoding = myEncoding)
business
#    사원명 출장지역 출장기간   부서 성별 교통비   식비 숙박비 부대비용
# 1  김연다     대전      7일 총무부 여자  60000 126000 280000    84000
# 2  서은손     부산      5일 총무부 여자 130000  90000 200000    60000
# 3  문상희     광주     10일 영업부 여자 100000 180000 400000   120000
# 4  은정나     목포      3일 영업부 여자 110000  54000 120000    36000
# 5  신나면     대전      6일 전산부 여자 110000 108000 240000    72000
# 6  강희동     대전      5일 전산부 남자 120000  90000 200000    60000
# 7  권노동     부산      8일 총무부 남자 120000 144000 320000    96000
# 8  장수학     목포      4일 총무부 남자 100000  72000 160000    48000
# 9  백두산     광주      7일 총무부 남자  50000 126000 280000    84000
# 10 한국민     대전      6일 영업부 남자  80000 108000 240000    72000

# 행만 골라서 출력 하기.
sheets <- seq(3, 5)
total_df <- data.frame()

# 3 4 5 시트에 있는 행을 전부 데이타 프레임에 전부 불러옴
for(sheet in sheets) {
+   dframe <- read.xlsx(file=filename, sheetIndex = sheet, encoding = myEncoding)
+   dframe$"분기" <- paste(sheet-2, "사분기", sep="")
+   total_df <- rbind(total_df, dframe)
+ }

total_df
#        제품명 X1일생산량 생산일수 총생산량 불량품 출고량    분기
# 1    미니오븐        100       60     6000     24   5976 1사분기
# 2    전기밥솥        150       60     9000     36   8964 1사분기
# 3      믹서기        200       60    12000     48  11952 1사분기
# 4  전자레인지        120       60     7200     29   7171 1사분기
# 5  미니냉장고         80       60     4800     19   4781 1사분기
# 6      가습기        200       60    12000     48  11952 1사분기
# 7      선풍기        180       60    10800     43  10757 1사분기
# 8    미니오븐        100       64     6400     26   6374 2사분기
# 9    전기밥솥        150       64     9600     39   9561 2사분기
# 10     믹서기        200       64    12800     52  12748 2사분기
# 11 전자레인지        120       64     7680     31   7649 2사분기
# 12 미니냉장고         80       64     5120     21   5099 2사분기
# 13     가습기        200       64    12800     52  12748 2사분기
# 14     선풍기        180       64    11520     47  11473 2사분기
# 15   미니오븐        100       62     6200     22   6178 3사분기
# 16   전기밥솥        150       62     9300     33   9267 3사분기
# 17     믹서기        200       62    12400     43  12357 3사분기
# 18 전자레인지        120       62     7440     26   7414 3사분기
# 19 미니냉장고         80       62     4960     17   4943 3사분기
# 20     가습기        200       62    12400     43  12357 3사분기
# 21     선풍기        180       62    11160     39  11121 3사분기

# income2 파일, 시트번호, 인코딩
income2 <- read.xlsx(file=filename, sheetIndex=1, encoding = myEncoding, rowIndex = c(2, 3), colIndex = c(1, 3:4), header = F)
# income2
#         X1         X3  X4
# 1 한종무역 에티오피아 5월
# 2 대망식품       인도 6월