我刚开始使用R,不确定如何将我的数据集与以下示例代码结合起来:
sample(x, size, replace = FALSE, prob = NULL)
我有一个数据集,需要将其分为训练集(75%)和测试集(25%)。我不确定应该放入x和size的信息是什么?x是数据集文件吗?size是指样本数量吗?
set.seed(12)
data = Sonar[sample(nrow(Sonar)),]#reshufles the data
bound = floor(0.7 * nrow(data))
df_train = data[1:bound,]
df_test = data[(bound+1):nrow(data),]
data <- tibble::rowid_to_column(data)
set.seed(11081995)
testdata <- data %>% slice_sample(prop = 0.2)
traindata <- anti_join(data, testdata, by = "rowid")
xtrain <- function(data, proportion, t1, t2){
data <- data %>% rowid_to_column("rowid")
train <- slice_sample(data, prop = proportion)
assign(t1, train, envir = .GlobalEnv)
test <- data %>% anti_join(as.data.frame(train), by = "rowid")
assign(t2, test, envir = .GlobalEnv)
}
xtrain(iris, .80, 'train_set', 'test_set')
尝试使用 idx <- sample(2, nrow(data), replace = TRUE, prob = c(0.75, 0.25))
,并使用提供的 id 访问拆分数据 training <- data[idx == 1,] testing <- data[idx == 2,]
set.seed(123)
llwork<-sample(1:length(mydata),round(0.75*length(mydata),digits=0))
wmydata<-mydata[llwork, ]
tmydata<-mydata[-llwork, ]
df = data.frame(read.csv("data.csv"))
# Split the dataset into 80-20
numberOfRows = nrow(df)
bound = as.integer(numberOfRows *0.8)
train=df[1:bound ,2]
test1= df[(bound+1):numberOfRows ,2]
我更喜欢使用dplyr
来改变数值
set.seed(1)
mutate(x, train = runif(1) < 0.75)
我可以继续使用dplyr::filter
和辅助函数,例如
data.split <- function(is_train = TRUE) {
set.seed(1)
mutate(x, train = runif(1) < 0.75) %>%
filter(train == is_train)
}
使用R行和列的索引有一种非常简单的方法来选择多行数据。这让你可以干净地分割数据集,比如说你要取前80%的数据。
在R中,所有的行和列都是有索引的,所以DataSetName[1,1]是“DataSetName”第一列和第一行的值。我可以使用[x,]选择行和[,x]选择列。
例如:如果我有一个方便命名为“data”的数据集,有100行,我可以使用以下代码查看前80行:
View(data[1:80,])
同样的,我可以使用以下代码选择这些行并将它们子集化:
train = data[1:80,]
test = data[81:100,]
现在我的数据被分成了两部分,没有重新采样的可能性。快速而简单。
x
可以是你的data
的索引(行/列编号)。size
可以是0.75*nrow(data)
。尝试使用sample(1:10, 4, replace = FALSE, prob = NULL)
查看它的作用。 - harkmug