[R] rbind와 cbind 예제

R 2015. 9. 3. 10:37

dataframe 의 컬럼과 열을 다양한 방식으로 더할 수 있다.


rbind()는 row방향으로 바인드 해준다는 함수이고,

cbind()는 column방향으로 바인드 해준다는 함수이다.



소스


rbind(c(1, 2, 3), c(4, 5, 6))

cbind(c(1, 2, 3), c(4, 5, 6))


first <- rbind(c(1, 2, 3), c(4, 5, 6)) 

first

second <- cbind(first, c(4, 7))

second




결과


> rbind(c(1, 2, 3), c(4, 5, 6))

     [,1] [,2] [,3]

[1,]    1    2    3

[2,]    4    5    6

> cbind(c(1, 2, 3), c(4, 5, 6))

     [,1] [,2]

[1,]    1    4

[2,]    2    5

[3,]    3    6

> first <- rbind(c(1, 2, 3), c(4, 5, 6))

> first

     [,1] [,2] [,3]

[1,]    1    2    3

[2,]    4    5    6

> second <- cbind(first, c(4, 7))

> second

     [,1] [,2] [,3] [,4]

[1,]    1    2    3    4

[2,]    4    5    6    7


'R' 카테고리의 다른 글

[R]의 fix() 함수  (0) 2015.09.09
R에서 표준편차/평균 구하기  (0) 2015.09.09
[R] NULL과 NA 비교  (0) 2015.09.01
[R] matrix에서 column, row 이름 변경하기  (0) 2015.09.01
[R]에서 불린(boolean) 값  (0) 2015.09.01
Posted by '김용환'
,

[R] NULL과 NA 비교

R 2015. 9. 1. 17:00


R의 NULL과 NA 개념이 처음 쓸 때는 혼란스러웠는데, 써보니 재미있는 값이다. 


NULL은 초기화되지 않은 값을 의미하고, NA은 아직 모른다(Not Available), 할당하지 않은 값, 결측치을 의미한다. 




x <- c(1,2,3,NA)

x


x <- c(NA, 1, 2)

x


x <- c(NULL, NULL, 3)

x


x <- c(1,2,3,NULL)

x




<결과>


> x <- c(1,2,3,NA)

> x

[1]  1  2  3 NA

> x <- c(NA, 1, 2)

> x

[1] NA  1  2

> x <- c(NULL, NULL, 3)

> x

[1] 3

> x <- c(1,2,3,NULL)

> x

[1] 1 2 3



일반적으로 NA와의 계산은 잘 안된다. NA로 된다. 그러나 na.rm이라는 것을 사용하면 na을 제외시켜 계산할 수 있다.

1 + NA

NA & TRUE


sum(c(5, 10, NA), na.rm=T)



<결과>

> 1 + NA

[1] NA

> NA & TRUE

[1] NA

> sum(c(5, 10, NA), na.rm=T)

[1] 15


'R' 카테고리의 다른 글

R에서 표준편차/평균 구하기  (0) 2015.09.09
[R] rbind와 cbind 예제  (0) 2015.09.03
[R] matrix에서 column, row 이름 변경하기  (0) 2015.09.01
[R]에서 불린(boolean) 값  (0) 2015.09.01
R 개발 후기  (0) 2015.08.25
Posted by '김용환'
,


matrix에서 컬럼명과 로우명을 변경하기 위해 dimnames()을 쓰거나 rownames(), colnames()을 사용할 수 있다.



mat<-matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3)

mat

dimnames(mat) <-list(c("row1", "row2", "row3"),  c("col1", "col2", "col3"))

mat





mat<-matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3)

rownames(mat) <- c("row1", "row2", "row3")

mat

colnames(mat) <- c("col1", "col2", "col3")

mat



'R' 카테고리의 다른 글

[R] rbind와 cbind 예제  (0) 2015.09.03
[R] NULL과 NA 비교  (0) 2015.09.01
[R]에서 불린(boolean) 값  (0) 2015.09.01
R 개발 후기  (0) 2015.08.25
[R] 텍스트 파일 읽기  (0) 2015.08.21
Posted by '김용환'
,

[R]에서 불린(boolean) 값

R 2015. 9. 1. 16:43



R의 불린 값은 TRUE, FALSE를 사용할 수 있고, 짧게 T, F로 사용가능하다.



a<-T

typeof(a)

class(a)


b<-TRUE

typeof(b)

class(b)


if (a == b) {

  print("a==b")

}



결과

> a<-T
> typeof(a)
[1] "logical"
> class(a)
[1] "logical"
> b<-TRUE
> typeof(b)
[1] "logical"
> class(b)
[1] "logical"
> if (a == b) {
+   print("a==b")
+ }
[1] "a==b"



또한, 매개변수에서도 간략하게 T,F로 사용가능하다.


matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3, byrow=T)

matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3, byrow=TRUE)

'R' 카테고리의 다른 글

[R] NULL과 NA 비교  (0) 2015.09.01
[R] matrix에서 column, row 이름 변경하기  (0) 2015.09.01
R 개발 후기  (0) 2015.08.25
[R] 텍스트 파일 읽기  (0) 2015.08.21
[R] data frame을 excel, xml, json으로 export하기  (0) 2015.08.21
Posted by '김용환'
,

R 개발 후기

R 2015. 8. 25. 20:20


R과 일래스틱서치를 이용하여 데이터의 검색 랭킹 시스템을 구현해보았다.

R 공부를 책으로 하지 않고, 그냥 부딪히면서 (HEAD FIRST R Language) 개발 후기 경험담을 적는다.


처음에는 Python의 Pandas를 하다가 1일 만에 포기한 것은 개발환경과 부족한 API였다. 노트라는 개발 IDE가 있지만, Python 만의 버전 이슈와 노트라는 개발 IDE는 웹 기반이라 데이터가 커지만 메모리 이슈에 잘 부딪혔다. 그러나 data frame같은 타입은 훌륭했다.


그래서, IDE의 편리성이 좋으면서 괜찮게 잘 개발할 만 무엇인가를 찾아보았는데, 회사 동료가 추천한 R 언어를 실제 써보니 황홀했다. 


써보니 장점은 다음과 같았다.


첫 번째, R 언어는 엑셀 관점으로 접근하는 방법론(function 단위의 개발)이 좋았다. 즉, 객체가 아닌 function 단위로 접근하는 구조이기 때문에 function 이 타입을 지원(또는 Any())하면 개발하기 편했다. 


두 번째, 타입에 matrix(table, frame) 타입 덕에 2차원 데이터를 관리하기 좋았다. 기존 언어에서는 객체라는 구조안에 메소드(또는 함수)에 갇혀 있었다면, 2차원 배열의 값을 2차원 배열을 다루는 function을 써서 for문을 최대한 줄일 수 있었다.


세 번째, RStudio라는 IDE툴과 리눅스에서 잘 동작되는 언어라서 훌륭했다.


네 번째, 모르는 것은 구글에 검색하면 대부분 다 존재했다. (특히 스택 오버 플로우)


단점은..


1. 개념없이 접근하기 쉽지만, 결국 개념때문에 헤맸다. 객체 지향 개념이 R언어에서는 그렇게 좋지 않을 수도 있다는 느낌이 있다.


2. API 찾기가 힘들었다. 쓰고 싶은 API가 단순하면 좋겠지만, 찾는데 좀 오래 걸릴 수 있다. 


3. 전역 변수라, 모듈-모듈, 모듈-로직 간 변수간 충돌이 일어날 수 있다. 큰 프로젝트에는 안 맞을 수도 있을 것 같았다.







'R' 카테고리의 다른 글

[R] matrix에서 column, row 이름 변경하기  (0) 2015.09.01
[R]에서 불린(boolean) 값  (0) 2015.09.01
[R] 텍스트 파일 읽기  (0) 2015.08.21
[R] data frame을 excel, xml, json으로 export하기  (0) 2015.08.21
[R] string trim 함수  (0) 2015.08.21
Posted by '김용환'
,

[R] 텍스트 파일 읽기

R 2015. 8. 21. 15:04



R에서 텍스트 파일 읽는 예제이다. 


conn=file("json.txt",open="r")

line=readLines(conn)

for (i in 1:length(line)){

  print(line[i])

}

close(conn)



RStudio에서 디버그를 위해서 다음과 같이 파일을 쉽게 볼 수 있다.


file.show("json.txt")




system("open json.txt")



'R' 카테고리의 다른 글

[R]에서 불린(boolean) 값  (0) 2015.09.01
R 개발 후기  (0) 2015.08.25
[R] data frame을 excel, xml, json으로 export하기  (0) 2015.08.21
[R] string trim 함수  (0) 2015.08.21
R 컨퍼런스 2015 자료  (0) 2015.08.20
Posted by '김용환'
,




R에서 data frame을 excel, xml, json으로 export 하는 예제이다.


1. excel export

WriteXLS 모듈을 설치하고 WriteXLS를 사용한다.


#install.packages("WriteXLS")

library("WriteXLS")

a <- c("apple", "banana", "cherry")

b <- c(100, 200, 300)

f <- data.frame(name=a, price=b)

f

WriteXLS("f", "fruit.xls")

system("open fruit.xls")




2. XML export
XML과 kulife 모듈을 설치하고 write.xml을 이용한다.


#install.packages("XML")
#install.packages("kulife")
library("XML")
library("kulife")

a <- c("apple", "banana", "cherry")
b <- c(100, 200, 300)
f <- data.frame(name=a, price=b)
f
write.xml(f, "fruit.xml")
system("open fruit.xml")



3. json export

json 파일로 export 하려면 sink와 cat을 활용한다.
library(rjson)
sink("json.txt")
cat(toJSON(f))
sink()
file.show("json.txt")



결과


{"name":["apple","banana","cherry"],"price":[100,200,300]}  


'R' 카테고리의 다른 글

R 개발 후기  (0) 2015.08.25
[R] 텍스트 파일 읽기  (0) 2015.08.21
[R] string trim 함수  (0) 2015.08.21
R 컨퍼런스 2015 자료  (0) 2015.08.20
[R] data frame 정렬 하기 - arrange, order  (0) 2015.08.20
Posted by '김용환'
,

[R] string trim 함수

R 2015. 8. 21. 14:26



R의 trim 함수가 없어서 정의하면 좋다.


여러가지 구현이 있을 수 있겠는데, gsub를 통해 간단히 구현가능하다.



trim <- function (x) gsub("^\\s+|\\s+$", "", x)

trim(" aa bbb    ")




Posted by '김용환'
,

R 컨퍼런스 2015 자료

R 2015. 8. 20. 19:58


R 컨퍼런스 2015 의 스케쥴 페이지(http://rconference.fossa.kr/Schedule)에 자료가 없다.

그러나, 스피커 (http://rconference.fossa.kr/Speaker) 페이지의 제목에 자료가 있다.



내가 보기에 R 컨퍼런스 2015 자료 중 좋은 자료는 다음과 같았다.



http://rconference.fossa.kr/handout/R_conference_mkseo.pdf


http://rconference.fossa.kr/handout/sentiment_analysis_hyungjunkim.pdf


http://rconference.fossa.kr/handout/2015RKOREASNA-Document.pdf

http://rconference.fossa.kr/handout/Spatiotemporal_Epidemiology_Using_R.pdf



Posted by '김용환'
,




R에서 data frame을 정렬하는 예제이다. 

단순히 arrange를 이용하거나 order를 이용할 수 있다. 참고로 역순은 desc() 함수를 사용한다.



소스 


mt = c(90, 90, 80) 

na = c(90, 90, 60)

sa = c(80, 80, 90)

df = data.frame(nm, mt, na, sa) 

df

arrange(df, nm)


arrange(df, desc(nm))


df[with(df, order(desc(nm))), ]






결과


> mt = c(90, 90, 80)

> na = c(90, 90, 60)

> sa = c(80, 80, 90)

> df = data.frame(nm, mt, na, sa)

> df

       nm mt na sa

1  samuel 90 90 80

2   aston 90 90 80

3 patrick 80 60 90

> arrange(df, nm)

       nm mt na sa

1   aston 90 90 80

2 patrick 80 60 90

3  samuel 90 90 80

> arrange(df, desc(nm))

       nm mt na sa

1  samuel 90 90 80

2 patrick 80 60 90

3   aston 90 90 80

> df[with(df, order(desc(nm))), ]

       nm mt na sa

1  samuel 90 90 80

3 patrick 80 60 90

2   aston 90 90 80

Posted by '김용환'
,