我想在将一些大数据输入函数之前对其进行排序/处理。
我有一个大型的日志读数数据集,包含许多独特的地址和时间。
数据看起来有点像这样:
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]), ]
答案 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