从一个大的数据集中选取、删除部分子集,或者从原有的集合中抽取子集从而构造不同的训练集和测试集都是十分常用的。这篇博客主要讲解几种选取子集的方法
1、选入子集如果数据集包含过多无用的变量,则可以从一个大数据集中选择有限数量的变量来创建一个新的数据集,这是常有的事。
new dataframe <- dataframe[row indices, column indices]
可以用来选择子集
per <- data.frame(name = c("张三","李四","王五","赵六"),
q1 = c(23,45,34,1000),
q2 = c(34,56,34,43))
per
newper <- per[,c(1,3)] #选取第1、3行
newper
2、剔除部分变量
剔除变量的原因有很多。举例来说,如果某个变量中有很多缺失值,可能就想在进一步分
析之前将其丢弃;或者数据集中包含小部分无用的变量等等。
per
var <- names(per) %in% c("q1") #names()生成所有变量名;%in%可以生成逻辑值
newper <- per[!var] #对上述取反,即true为false。
newper
per <- data.frame(name = c("张三","李四","王五","赵六"),
q1 = c(23,45,34,1000),
q2 = c(34,56,34,43))
newper <- per[,-2] #在已知要去除的变量位于第几列时,可以直接剔除
newper
3、subset()函数
使用 subset() 函数可以简单的进行选择变量和观测。常用的格式为:subset(x, subset, select, drop = FALSE, ...)
。第一个参数是原数据集,第二个参数是选择的条件,第三个参数是保留变量范围。
help("subset") #查看细节
per <- data.frame(name = c("张三","李四","王五","赵六"),
q1 = c(23,45,34,1000),
q2 = c(34,56,34,43))
newper <- subset(per,q1<40 | q2 <40,select = c("name","q1","q2"))
newper <- subset(per,q1<40 | q2 <40,select = c(1:3))
newper
4、随机抽样
在实际操作中可能希望选择两份随机样本,使用其中一份样本构建预测模型,使用另一份样本验证模型的有效性。sample()
函数能够让你从数据集中(有放回或无放回地)抽取大小为 n 的一个随机样本。格式为:sample(x, size, replace = FALSE, prob = NULL)
sample() 函数中的第一个参数是一个由要从中抽样的元素组成的向量,第二个参数是要抽取的元素数量,第三个参数表示无放回抽样。
per <- data.frame(name = c("张三","李四","王五","赵六"),
q1 = c(23,45,34,1000),
q2 = c(34,56,34,43))
newper <- per[sample(1:nrow(per),3,replace = T),]
newper