子集列基于一段时间

时间:2015-01-27 18:50:52

标签: r time filter subset plyr

我正在尝试根据一段时间对数据框进行子集化。有人过去曾问过这个问题,答案是使用R CMD INSTALL lubridate_1.3.1.tar.gz(请参阅链接:subset rows according to a range of time

这个答案的问题是我收到以下 警告

> install.packages("lubridate_1.3.2.tar.gz")
Warning in install.packages :
  package ‘lubridate_1.3.2.tar.gz’ is not available (for R version 3.1.2)

我正在寻找与此答案非常相似的内容,但我无法弄清楚如何做到这一点。我有一个MasterTable,我的所有数据都按列排列。我的一个专栏名为maxNormalizedRFU

我的问题很简单: 如何按时间对我的maxNormalizedRFU列进行子集化?

我只想添加另一个列,该列仅在10小时到14小时之间显示maxNormalizedRFU数据。这就是我现在所拥有的:

#Create主表
MasterTable <- inner_join(LongRFU, LongOD, by= c("Time.h", "Well", "Conc.nM", "Assay")) 
#根据称为“分析”的6个不同子集,通过荧光(RFU)和光密度(OD)对数据进行归一化
MasterTable$NormalizedRFU <- MasterTable$AvgRFU/MasterTable$AvgOD 
#create一列只选择每个“Assay”的最大值
MasterTable <- ddply(MasterTable, .(Conc.nM, Assay), transform, maxNormalizedRFU=max(NormalizedRFU)) 
问题
MasterTable$CutmaxNormalizedRFU <- ddply(maxNormalizedRFU, "Time.h", transform, [MasterTable$Time.h < 23.00 & MasterTable$Time.h > 10.00,])

Attached是我的数据集的示例。由于原始文件有超过90 000行,我只附加了一小部分(只有一个分析和一个浓度)。

我的线目前正在使用ddply来完成子集,但这根本不起作用。有没有人建议如何解决这个问题?

提前谢谢!

马蒂

1 个答案:

答案 0 :(得分:1)

我下载了你的数据,看看了。如果我没有弄错的话,您只需要使用Time.h对数据进行子集化。在这里你有一个你想要的时间范围(10-23)。我使用了dplyr并执行了以下操作。您要求R在Time.h中选取值介于10和23之间的行。您的数据框在此处称为mydf

library(dplyr)
filter(mydf, between(Time.h, 10, 23))