我试图找到为什么我不能在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。
为了清楚起见,我的问题是如何使用我的首选方法或其他方法进行子集化?
答案 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)