在R中使用多个条件进行子集化的问题

时间:2013-07-30 01:23:38

标签: r

我试图找到为什么我不能在R中进行子集的基础。

我的数据集Rdataset有3列:Epoch,Distance和BaselineVectorID。 我想要做的是根据Epoch的多个条件对距离进行子集化。我在StackOverflow上查看了多个Q& A,并尝试了很多关于我的数据集的响应但没有工作。这是背景:

首先,Epoch的范围从2007-11-15到2011-03-30我设置

StartDate <- "2008-01-01"
as.numeric(as.Date(StartDate)); StartDate

然后我量化了时间窗的持续时间

ShortTermDuration <-  30
LongTermDuration  <- 365

然后我定义时间窗口,

MonthAhead  <- as.Date(StartDate) + ShortTermDuration;  MonthAhead
MonthBehind <- as.Date(StartDate) - ShortTermDuration; MonthBehind

然后我想通过子集化来定义较小的数据集,并尝试了以下每种不同的方法以及相关的结果:

1

Rdataset[Rdataset$Epoch >= "2008-01-01" & Rdataset$Epoch < "2008-02-01"]

结果:

data frame with 0 columns and 703 rows

2

ShortTermDataset <- subset(Rdataset, Epoch>=MonthBehind & Epoch<=MonthAhead)

结果:

Warning messages:
1: In eval(expr, envir, enclos) :
Incompatible methods ("Ops.POSIXt", "Ops.Date") for ">="
2: In eval(expr, envir, enclos) :
Incompatible methods ("Ops.POSIXt", "Ops.Date") for "<="
[1] Epoch            Distance         BaselineVectorID
<0 rows> (or 0-length row.names)

3

ShortTerm.df <- Rdataset[Epoch>=MonthBehind & Epoch<MonthAhead, ]

结果:

Error in `[.data.frame`(Rdataset, Epoch >= MonthBehind & Epoch < MonthAhead,  : 
object 'Epoch' not found

所以没有一种方法可行。我首选的技术是#3。

为了清楚起见,我的问题是如何使用我的首选方法或其他方法进行子集化?

2 个答案:

答案 0 :(得分:1)

你可能想要

ShortTermDataset <- subset(Rdataset, as.Date(Epoch) >=MonthBehind &
                                     as.Date(Epoch) <=MonthAhead)

答案 1 :(得分:1)

这些失败的原因(具体为#1#3)是因为您使用data.table语法和data.frame

对于#1,在结束括号前选择的行后需要逗号:, ]
对于#3

data.frame语法:

ShortTerm.df <- 
 Rdataset[Rdataset$Epoch>=MonthBehind & Rdataset$Epoch<MonthAhead, ]

使用data.table语法转换为data.table:

library(data.table)
Rdataset <- data.table(Rdataset)
ShortTerm.df <- Rdataset[Epoch>=MonthBehind & Epoch<MonthAhead, ]

(值得注意的是data.table可以使用任何一种语法,因为data.table s也是data.frame s)