2017-06-06 81 views
0

https://www.dropbox.com/s/35w66sri5rauv5d/FlightDelays.csv?dl=0精確拆分是R中

我讀從含有2201 rows.using分割功能以上的鏈接的數據集使用分割功能沒有發生,我給作爲0.6.Then我應該得到兩個數據集的比率它分別是1320和881的數據集。雖然它的工作正常,但是現在當我分裂時,而不是0.6分裂發生在0.53,即使我指定0.6作爲我在分裂中的比例。這可能是突然出現的問題如何解決此問題。代碼如下。

library(caTools) 
originaldata.df<-read.csv("use csv from the link given above") 
split<-sample.split(originaldata.df,SplitRatio = 0.6) 
Trainingdataset<-subset(originaldata.df,split == "TRUE") 
Testingdataset<-subset(originaldata.df,split == "FALSE") 

ExpectedOutput: 
1320(2201*60/100) 
881(2201*40/100) 
Actualoutput: 
1186 
1015 
+0

我太累了,人物爲什麼,但我意識到'caTools'樣品的列而不是行。 – Masoud

+0

[如何在R程序中使用示例函數將數據拆分爲訓練/測試集](https://stackoverflow.com/questions/17200114/how-to-split-data-into-training-testing-sets-使用樣本函數式-R-程序) –

回答

0

BASE-R:

可以使用索引和由分流比爲它們分配;

indexes = sample(1:nrow(originaldata.df), 
size=0.6*nrow(originaldata.df)) 

Trainingdataset <- originaldata.df[indexes,] 
Testingdataset <- originaldata.df[-indexes,] 

這將是輸出:

> dim(Testingdataset) 
# [1] 881 13 
> dim(Trainingdataset) 
# [1] 1320 13 

caTools包:

library(caTools) 
#It should be applied on one of column of the data.frame otherwise samples over rows; 
split<-sample.split(originaldata.df$schedtime,SplitRatio = 0.6) 

Trainingdataset<-subset(originaldata.df,split == "TRUE") 
Testingdataset<-subset(originaldata.df,split == "FALSE") 

和子集的大小(你期望不完全是;)

> dim(Trainingdataset) 
# [1] 1323 13 
> dim(Testingdataset) 
# [1] 878 13 
0

這裏是一個定製的分裂功能,將獲得基於給定的比例rownumbers兩個子集:

splitFactor <- function(rows, prop){ 
    a <- sample(seq(rows), ceiling(rows*prop)) 
    b <- sample(seq(rows), floor(rows*(1-prop))) 
    list(a[order(a)],b[order(b)]) 
} 


sp.53 <- splitFactor(nrow(iris), .53) 
lapply(sp.53, length) 

# [[1]] 
# [1] 80 

# [[2]] 
# [1] 70 

爲了得到訓練和測試與功能設置:

all.sets <- lapply(splitFactor(nrow(iris), .6), 
        function(x) iris[x,]) 

lapply(all.sets, dim) 

# [[1]] 
# [1] 90 5 

# [[2]] 
# [1] 60 5