본문 바로가기
R

R ) ::독학 dataset 나누기 7:3, 6:2:2 in r

by C.Mond 2022. 5. 3.
728x90
728x90
data_split <- function(data,reference){
factor <- names(table(data[reference]))
data_0.7 <- c()
data_0.3 <- c()
for(i in 1:length(factor)){
df <- data[data[reference]==factor[i],]
sn <- sample(1:nrow(df),size=nrow(df)*0.7,replace = F)
df_7 <- df[sn,]
df_3 <- df[-sn,]
data_0.7 <- rbind(data_0.7,df_7)
data_0.3 <- rbind(data_0.3,df_3) }
my_list <- list(data_0.7,data_0.3)
return(my_list)
}
data_split(iris,"Species")

dataset을 7:3으로 train, test를 나눠주는 코드 이다.

이렇게 나눠주는 함수가 있었던것 같은데 못찾아서 한번 만들어 보았다.... 근데 reference에 dataframe의 인자를 넣는데 ""를 붙여서 넣어줘야한다... 안붙이고 그냥 넣어서는 못하나...?

저 함수에 인자를 넣고 data$reference 를 출력하라고 함수 를 했는데 왜 안될까 이거 되게하는 방법이 없을까....?

여튼 reference에 넣어준 인자 기준으로 7:3으로 정확하게 나눠준다.

list로 반환을 하는데 첫번째것이 train, 2번째 것이 test set이다.

 

 

data_split_622 <- function(data,reference){
df_result <- c()
factor <- names(table(data[reference]))
for(i in 1:length(factor)){
df <- data[data[reference]==factor[i],]
sn <- sample(1:3,size=nrow(df),replace = T,prob = c(0.6,0.2,0.2))
df$sn <- sn
df$type <- ifelse(df$sn==1,"train",ifelse(df$sn==2,"vaild","test"))
df_result <- rbind(df_result,df)
}
return(df_result)
}

위 코드는 reference를 기준으로 dataset을 train vaild test set으로 나눠주는 코드이다 딱 맞게 저 비율 6:2:2로 나누진 않고 근사하게 맞춘다. 이렇게 하면 iris로 치면 Species의 factor별로 일정하게 6:2:2로나눈다

예를 들면  setosa, versicolor, virginica 별로 6:2:2로 뽑아준다.

왜냐하면 확률적으로 1,2,3을 뽑아서 정하기 때문이다.

728x90
728x90

댓글