본문 바로가기
  • Let's go grab a data
Data/R

[R 기초] 파일 가져오기, 데이터 뽑기, 조건문, 반복문

by pub-lican-ai 2016. 3. 6.
반응형

[R 기초] 파일 가져오기, 데이터 뽑기, 조건문, 반복문 #read.table #read.scv #ifelse #repeat #while #for


유닉스 계열 ASCII \n(New Line)

윈도우 계열 ASCII \r(Carriage Return) \n(New Line)


텍스트 파일을 데이터프레임 형태로 읽기 read.table()

read.table(file, header=F,sep=" ", quote="\"'", ...)

header : 첫 줄을 데이터로 읽을 것인지 여부

sep : 열 구분자로 기본값은 공백

quote : 값을 둘러싸는 인용 부호 기본값은 큰 따옴표 "

예시)

> getwd()

[1] "c:/data/Lecture"

> setwd("c:\\data\\Lecture")

#작업폴더내에 첨부 파일(person.txt)을 저장


person.txt


> persons <- read.table("person.txt",header = T, sep = " ")

> persons

   키 체중 나이

1 167   54   21

2 176   74   32

3 180   67   27

> str(persons)

#데이터 프레임 형태로 가져옴

'data.frame': 3 obs. of  3 variables:

 $ 키  : int  167 176 180

 $ 체중: int  54 74 67

 $ 나이: int  21 32 27


csv파일을 데이터프레임 형태로 읽기 read.csv()

예시)

> persons <- read.csv("person.csv",header = T, sep = " ")

#txt 파일 내용을 엑셀로 옮기고 scv 파일로 다른이름 저장하여 사용

> persons

   키 체중 나이

1 167   54   21

2 176   74   32

3 180   67   27


흐름 제어문

예시)

> ex <- c(1,3,6,NA,23)

> ex

[1]  1  3  6 NA 23

> ex<10

[1]  TRUE  TRUE  TRUE    NA FALSE

> ex[ex<10]

[1]  1  3  6 NA

> which(ex<10)

[1] 1 2 3

> is.na(ex)

[1] FALSE FALSE FALSE  TRUE FALSE

> ex[ex%%2==0]

[1]  6 NA

> which(is.na(ex))

[1] 4

> ex[ex%%2==0|!is.na(ex)]

[1]  1  3  6 NA 23

> ex[ex%%2==0&is.na(ex)]

[1] NA


> df<-data.frame(name=c("A","B","C"),age=c(21,22,34),gender=c("F","M","F"))

> df

  name age gender

1    A  21      F

2    B  22      M

3    C  34      F

> df[df$gender=="M" & df$age<30,]

  name age gender

2    B  22      M

> df[df$gender=="F" & df$age<30,c(1,2)]

  name age

1    A  21


조건문 ifelse 

> x<-6:(-4)

> x

 [1]  6  5  4  3  2  1  0 -1 -2 -3 -4

> options(digits = 3)

> sqrt(x)

 [1] 2.45 2.24 2.00 1.73 1.41 1.00 0.00  NaN  NaN  NaN  NaN

Warning message:

In sqrt(x) : NaNs produced

> ifelse(x>0,x,NA)

 [1]  6  5  4  3  2  1 NA NA NA NA NA

> sqrt(ifelse(x>0,x,NA))

 [1] 2.45 2.24 2.00 1.73 1.41 1.00   NA   NA   NA   NA   NA


조건문 if else

> if(is.vector(x)){

+ length(x)

+ }else if(is.integer(x)){

+ sum(x)

+ }else{

+ paste(x,1)

+ }

[1] "1 1" "2 1" "3 1"


반복문 repeat

> i<-20

> repeat{

+ if(i>25){

+ break

+ }else{

+ print(i)

+ i<-i+1

+ }

+ }

[1] 20

[1] 21

[1] 22

[1] 23

[1] 24

[1] 25


반복문 while

> dan<-2

> i<-2

> while(i<5){

+ times<-i*dan

+ print(paste(dan,"X",i,"=",times))

+ i<-i+1

+ }

[1] "2 X 2 = 4"

[1] "2 X 3 = 6"

[1] "2 X 4 = 8"


반복문 for

> dan<-9

> for(i in 2:4){

+ times<-dan*i

+ print(paste(dan,"X",i,"=",times))

+ }

[1] "9 X 2 = 18"

[1] "9 X 3 = 27"

[1] "9 X 4 = 36"


for문은 매번 계산시마다 벡터를 생성하게 되어 있기 때문에 느리다. 

따라서 아래와 같이 미리 빈 벡터를 만들어놓고 채워가는게 더 효율이 높음

> dan<-9

> times<-vector(length=9)

> for(i in 1:9){

+ times[i]<-dan*i

+ }

> times

[1]  9 18 27 36 45 54 63 72 81


반응형