R - 提取数据集中的特定行并保存到新的数据框中
R - Extract Specific Rows in Dataset And Save Into New Dataframes
我正在寻找 sort/process 一些大数据,然后再将其输入函数。
我有一个很大的日志读数数据集,由许多独特的地址和时间组成。
数据看起来有点像这样:
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")
我现在想创建新的数据框来组合每个单独的唯一地址和每个日期。因此,一个数据框中日期为 23/09/2016 的 UNIQUE_ADDRESS1 的所有日志读数,然后是 24/08/2016 的另一个,等等。每个 UNIQUE_ADDRESS.
都相同
我试过使用 grep 和 grepl,但是当我在 if 循环或 ifelse 循环中使用它们时,他们声称我的日期不在我的设备数据帧中(它们肯定是),并且我的任何值试试看,它 returns 无论如何都是假的。
任何人都可以帮助我实现我的目标吗?
谢谢
编辑
目前我正在尝试在 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]), ]
假设您在数据框中输入了数据,例如
> 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 包 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
我正在寻找 sort/process 一些大数据,然后再将其输入函数。
我有一个很大的日志读数数据集,由许多独特的地址和时间组成。
数据看起来有点像这样:
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")
我现在想创建新的数据框来组合每个单独的唯一地址和每个日期。因此,一个数据框中日期为 23/09/2016 的 UNIQUE_ADDRESS1 的所有日志读数,然后是 24/08/2016 的另一个,等等。每个 UNIQUE_ADDRESS.
都相同我试过使用 grep 和 grepl,但是当我在 if 循环或 ifelse 循环中使用它们时,他们声称我的日期不在我的设备数据帧中(它们肯定是),并且我的任何值试试看,它 returns 无论如何都是假的。
任何人都可以帮助我实现我的目标吗?
谢谢
编辑
目前我正在尝试在 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]), ]
假设您在数据框中输入了数据,例如
> 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 包 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