본문 바로가기
Data Science

R프로그래밍 Data Type 알아보기

by 호기심 많은 직장인 2022. 6. 3.
728x90
728x90

학부생때는 주로 R을 사용했었는데...지금은 Base가 파이썬이다보니 R을 까먹었다ㅠㅠ

다시 새로운 마음가짐으로 정리할겸, 기본적인 R의 Data Type에 대해 알아보자!


##### 변수 #####

goods = "냉장고"

 

# 변수 사용시 객체 형태로 사용하는 것을 권장

goods.name = "냉장고"

goods.code = "ref001"

goods.price = 600000

 

goods.name

 

# 값을 대입할 때에는 = 보다는 <- 사용

goods.name <- "냉장고"

goods.code <- "ref001"

goods.price <- 600000

 

# 데이터 타입 확인

class(goods.name)

class(goods.price)

mode(goods.name)

mode(goods.price)

 

# 도움말 활용

help(sum)

?sum

args(sum)

example(sum)

 

##### 데이터 타입 #####

 

#* 배열

#* ---

#* 1) 같은 형식끼리 묶어준다

#* 2) 크기가 정해져 있다.

#* 3) 삽입, 삭제가 불편

 

# 스칼라(0차원) : 숫자, 문자열, 불린(boolean), 팩터, NA, null

# *.기본 자료형 : numeric, character, logical, factor

# *.특수 자료형 : NA, NULL, NaN, Inf

# 벡터(1차원) : 기본 데이터 타입(Vector)

# 행렬(2차원) : Matrix

# 데이터프레임(2차원) : DataFrame

# 배열(3차원 이상) : Array

# 리스트(3차원 이상) : List

 

##### Vector #####

#1) 기본 자료 구조

#2) 1차원 배열

#3) 인덱스 접근

#4) 동일한 자료형만 저장

#5) c():combine, seq(), rep(), ...

 

v <- c(1, 2, 3, 4, 5)

v

class(v)

mode(v)

 

(v <- c(1, 2, 3, 4, 5))

 

mode(c(1:5))

class(c(1, 2, 3, 4, "5"))

 

# seq()

?seq

(seq(from=1, to=10, by=2))

(seq(1, 10, 2))

 

# rep()

(rep(1:3, 3))

 

# 벡터의 접근

a <- c(1:50)

a[10:45]

length(a)

a[10:(length(a)-5)]

a[10:length(a)-5]

 

b<- c(13, -5, 20:23, 12, -2:3)

b

b[1]

b[c(2, 4)]

b[c(4, 5:8, 7)]

b[-1]

b[-2]

b[-c(2, 4)]

 

# 집합 연산

x <- c(1, 3, 5, 7)

y <- c(3, 5)

 

union(x, y); setdiff(x, y); intersect(x, y)

 

# 컬럼명 지정

age <- c(30, 35, 40)

names(age) <- c("홍길동", "임꺽정", "신돌석")

age

 

# 특정 변수의 데이터 제거

age <- NULL

age

 

# 벡터 생성의 또다른 표현

x <- c(2, 3)

x <- (2:3)

x

 

########################### factor

# 범주형 데이터 타입

 

gender <- c("man", "women", "women", "man", "man")

gender

class(gender)

mode(gender)

is.factor(gender)

plot(gender)

 

ngender <- as.factor(gender)

ngender

class(ngender)

mode(ngender)

is.factor(ngender)

plot(ngender)

table(ngender)

 

?factor

ofactor <- factor(gender, levels=c("women", "man"), ordered=TRUE)

ofactor

 

########################### Matrix

# 1) 행과 열의 2차원 배열

# 2) 동일한 데이터 타입만 저장 가능

# 3) matrix(), rbind(), cbind()

 

m <- matrix(c(1:5))

m

 

m <- matrix(c(1:11), nrow=2)

m

 

m <- matrix(c(1:11), nrow=2, byrow=T)

m

 

class(m)

mode(m)

 

# rbind(), cbind()

x1 <- c(3, 4, 50:52)

x2 <- c(30, 5, 6:8, 7, 8)

x1

x2

 

mr <- rbind(x1, x2)

mr

 

mc <- cbind(x1, x2)

mc

 

# matrix 차수 확인

x <- matrix(c(1:9), ncol=3)

x

 

length(x); nrow(x); ncol(x); dim(x)

 

# 컬럼명 지정

colnames(x) <- c("one", "two", "three")

x

colnames(x)

 

# apply

?apply

apply(x, 1, max)

apply(x, 2, max)

apply(x, 1, sum)

apply(x, 2, sum)

 

# 행렬 데이터 접근

aws = read.delim("../data/AWS_sample.txt", sep="#")

head(aws)

 

(aws[1,1])

 

x1 <- aws[1:3, 2:4]

x1

 

# x2 <- aws[9:11, ]

x2 <- aws[9:11, 2:4]

x2

 

cbind(x1, x2)

rbind(x1, x2)

 

 

########################### data.frame

# 1) DBtable과 유사

# 2) R에서 가장 많이 사용되는 구조

# 3) 컬럼 단위로 서로 다른 데이터 타입 사용 가능

# 4) data.frame(), read.csv(), read.delim(), read.table(), ...

 

no <- c(1, 2, 3)

name <- c("hong", "lee", "kim")

pay <- c(150, 250, 300)

 

emp <- data.frame(NO=no, Name=name, Payment=pay)

emp

 

# read.csv(), read.table()

getwd()

setwd("../data")

getwd()

 

txtemp <- read.table("emp.txt", header=T, sep=" ")

txtemp

class(txtemp)

 

csvemp <- read.csv("emp.csv")

csvemp

 

csvemp1 <- read.csv("emp.csv", header=T, col.names=c("사번", "이름", "급여"))

csvemp1

 

csvemp2 <- read.csv("emp2.csv", header=F, col.names=c("사번", "이름", "급여"))

csvemp2

 

View(csvemp2)

 

#접근

csvemp2[,1]

csvemp2$사번

class(csvemp2$사번)

 

#구조 확인

str(csvemp2)

 

#기본 통계량 확인

summary(csvemp2)

 

# apply

df<-data.frame(x=c(1:5),y=seq(2,10,2), z=c("a","b","c","d","e"))

df

 

apply(df[,c(1,2)],2,sum)

apply(df[,c(1,2)],1,sum)

 

# 데이터의 일부 추출

x1<- subset(df,x>=3)

x1

 

x2<- subset(df,x>2 & x<=6 )

x2

 

height<-data.frame(id=c(1,2),h=c(180,175))

weight<-data.frame(id=c(1,2),h=c(80,75))

user<-merge(height,weight, by.x='id',by.y='id')

user

 

#######################################array

# 1), , 면의 3차원 배열 형태의 객체 생성

# 2)array()

 

v<-c(1:12)

arr<-array(v,c(3,2,3))

arr

arr[,,2]

#8 추출

arr[2,1,2]

 

 

#############list

# 1)keyvalue를 한쌍

# 2)python에서 dict와 유사

# 3)list()

 

x1<-1

x2<-data.frame(var=c(1,2,3), var2=c("a","b","c"))

x3<-matrix(c(1:12),ncol=2)

x4<-array(1:20, dim=c(2,5,2))

 

x5<- list(c1=x1,c2=x2,c3=x3,c4=x4)

x5

 

x5$c1

x5$c2

 

list1<-list("lee","이순신",95)

list1

 

list1[1]

list1[[1]]

list1[2]

list1[[2]]

 

# apply : lapply(), sapply()

# lapply : apply2차원 이상의 데이터만 입력을 받는다.

# vector를 입력받기 위한 방법으로 사용, 반환형은 list형이다.

# sapply : 반환형이 행렬 또는 vector로 반환(lapplywrapper)

 

a<-list(c(1:5))

b<-list(c(6:10))

a

b

 

c<-c(a,b)

c

class(c)

 

 

x<-lapply(c,max)

x

x1<-unlist(x)

x1

 

y<-sapply(c,max)

y

 

 

###날짜

Sys.Date()


이상 R을 이용한 Data Type에 대해서 알아보았다!

뭔가 또 느낌이 이상한데... 왜이렇게 프로그램이 많은거야

728x90
728x90

댓글