R - 在数据集中提取特定行并保存到新数据帧中

时间:2016-09-19 14:29:19

标签: r sorting merge grep dataset

我想在将一些大数据输入函数之前对其进行排序/处理。

我有一个大型的日志读数数据集,包含许多独特的地址和时间。

数据看起来有点像这样:

UNIQUE_ADDRESS1 24/08/2016 13:01
UNIQUE_ADDRESS2 24/08/2016 13:02
UNIQUE_ADDRESS3 24/08/2016 13:05
UNIQUE_ADDRESS1 25/08/2016 00:00
UNIQUE_ADDRESS2 25/08/2016 00:01
UNIQUE_ADDRESS3 25/08/2016 00:12

我最终运行的功能需要单独的数据框,包括特定的唯一地址和特定的日期。

数据框看起来像这样,包含所有包含特定唯一地址和特定日期的行。

dataframe1 <- [UNIQUE_ADDRESS1 24/08/2016 13:01, 
UNIQUE_ADDRESS1 24/08/2016 13:03, 
UNIQUE_ADDRESS1 24/08/2016 13:06, 
UNIQUE_ADDRESS1 24/08/2016 13:08
... etc]

其中将有一个dataframe2再次对应UNIQUE_ADDRESS1,但所有时间都在25/08/2016之间。这将针对每个设备完成。

我认为这需要在循环中完成,但我无法正确完成语法。

到目前为止,我使用grep从大量日志文件中提取每个唯一地址,如下所示,分别为每个设备创建数据框:

device1 <- logfile[grep("^UNIQUE_ADDRESS1", logfile[,2]), ]

然后我创建了一个日期数组:

dates <- c("23/09/2016", "24/08/2016", "25/08/2016")

我现在想要创建新的数据框,将每个独立的地址和每个日期组合在一起。所以UNIQUE_ADDRESS1在2016年9月23日的所有日志读数都在一个数据框中,然后另一个用于2016年8月24日等等。每个UNIQUE_ADDRESS也是如此。

我尝试过使用grep和grepl,但是当我在if循环或ifelse循环中使用它们时,它们声称我的日期不在我的设备数据框中(它们肯定是),以及我尝试的任何值,无论如何,它都会返回false。

有人可以帮助我实现我的目标吗?

由于

修改

目前我正在尝试在for循环中执行此操作,其中“device1”包含设备1的唯一地址,等等。但是,当我增加 i 时,它只会保存到了相同的数据名称(device1),而不是我需要的新数据帧。

for (k in 1:6)

device1 <- device1[grep(dates[i], device1[,4]), ]
device2 <- device2[grep(dates[i], device1[,4]), ]
device3 <- device3[grep(dates[i], device1[,4]), ]
device4 <- device4[grep(dates[i], device1[,4]), ]
device5 <- device5[grep(dates[i], device1[,4]), ]
device6 <- device6[grep(dates[i], device1[,4]), ]
device7 <- device7[grep(dates[i], device1[,4]), ]
device8 <- device8[grep(dates[i], device1[,4]), ]

1 个答案:

答案 0 :(得分:0)

假设您在数据框中有输入数据,例如

> myTable
             Var1       Var2  Var3
1 UNIQUE_ADDRESS1 24/08/2016 13:01  
2 UNIQUE_ADDRESS2 24/08/2016 13:02
3 UNIQUE_ADDRESS3 24/08/2016 13:05
4 UNIQUE_ADDRESS1 25/08/2016  0:00
5 UNIQUE_ADDRESS2 25/08/2016  0:01
6 UNIQUE_ADDRESS3 25/08/2016  0:12

考虑使用R-package plyr的dlply函数。

library(plyr)
myList = dlply(aTable, ~ Var1 + Var2, .fun = identity)

列表myList的每个元素都是您的子表之一,例如

> myList[[1]]
         Var1       Var2  Var3
1 UNIQUE_ADDRESS1 24/08/2016 13:01
相关问题