2022年5月21日星期六

数据取子集


选入(保留)变量

从一个大数据集中选择有限数量的变量来创建一个新的数据集是常有的事。

可以使用datafram[row indices, colum indices]这样的记号来选择变量,例如如下语句

newdata <- leadership[, c(6:10)]

考虑如下代码

myvars <- c("q1", "q2", "q3", "q4", "q5")
newdata <- leadership[myvars]

上述代码还可以写成

myvars <- paste("q", 1:5, sep="")
myvars
newdata <- leadership[myvars]
newdata

删除(丢弃)变量

删除变量的原因很多。

举例来说,如果某个变量中有若干缺失值,你可能就想在进一步分析之前将其丢弃。

考虑如下语句

myvars <- names(leadership) %in% c("q3", "q4")
newdata <- leadership[!myvars]

在知道了q3和q4是第8个和第9个变量的情况下,可以使用语句

newdata <- leadership[c(-8, -9)]

相同的变量删除工作还可以通过

leadership$q3 <- leadership$q4 <- NULL

在上面的这句命令中,将q3和q4两列设为了未定义(NULL)。注意,NULL和NA是不同的。

丢弃变量是保留变量的逆向操作。选择那种一种方式进行变量筛选依赖于两种方式的编码难易程度。如果有许多变量需要丢弃,那么直接保留需要留下的变量可能更加简单,反之亦然。

选入观测

选入或剔除观测(行)通常是成功的数据准备和数据分析的一个关键方面

思考下面的例子

#代码清单4-6 选入观测
newdata <- leadership[1:3,]
newdata <- leadership[which(leadership$gender == "M" & leadership$age >30), ]

attach(leadership)
newdata <- leadership[which(gender =='M',& age > 30), ]
detach(leadership)

在本章开始的时候,我曾经提到,你可能希望将研究范围限定在2009年1月1日到2009年12月31日之间的观测上,可以尝试如下代码

leadership$date <- as.Date(leadership$date, "%m/%d/%y")
startdate <- as.Date("2009-01-01")
enddate <- as.Date("2009-10-31")
newdate <- leadership[which(leadership$date > startdate &
                          leadership$date < enddate),]
newdate
  • 首先,使用格式mm/dd/yy将开始作为字符值读入的日期转换为日期值。

  • 然后,创建开始日期和结束日期。由于as.Date()函数的默认格式就是yyyy-mm-dd,所以,你无须在这里提供这个参数。

  • 最后,像上例一样选取那些满足你期望中准则的个案即可。

subset()函数

使用subse()函数大概是选择变量和观测最简单的方法了,思考如下代码

newdate <- subset(leadership, age >=35 | age < 24, select=c(q1, q2, q3, q4))
newdate <- subset(leadership, gender =="M" & age > 25, select=gender:q4)

随机抽样

在数据挖掘和机器学习领域,从更大的数据集中抽样是很常见的做法。

你可能希望选择两份随机样本,使用其中一份样本构建预测模型,使用另一份样本验证模型的有效性

sample()函数能够让你从数据集中(有放回或无放回地)抽取大小为n的一个随机样本。

你可以使用以下语句从leadership数据集中随机抽取一个大小为3 的样本:

mysample <- leadership[sample(1:nrow(leadership), 3, replace = FALSE), ]

没有评论: