我正在使用 R 和 Dplyr 以及一个数据集,其中一列包含日期/时间信息,一列包含电话号码,一列包含两个选项,鸡蛋和奶酪。
Date Phone.Number Eggs.or.Cheese
1 14/09/15 1111111111 EGGS
2 14/09/15 2222222222 EGGS
3 14/09/15 3333333333 EGGS
4 15/09/15 4444444444 EGGS
5 15/09/15 5555555555 EGGS
6 16/09/15 1111111111 CHEESE
7 16/09/15 6666666666 EGGS
8 16/09/15 7777777777 EGGS
(在这里输入信息):
structure(list(Date = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L,
3L), .Label = c("14/09/15", "15/09/15", "16/09/15"), class = "factor"),
Phone.Number = c(1111111111, 2222222222, 3333333333, 4444444444,
5555555555, 1111111111, 6666666666, 7777777777), Eggs.or.Cheese = structure(c(2L,
2L, 2L, 2L, 2L, 1L, 2L, 2L), .Label = c("CHEESE", "EGGS"), class = "factor")), .Names = c("Date",
"Phone.Number", "Eggs.or.Cheese"), class = "data.frame", row.names = c(NA,
-8L))
我正在尝试创建一个子集,其中包含所有在过去表示为 eggs 然后又称为 cheese 的电话号码。该子集将包括对这些电话号码的所有观察结果,如下所示。
Date Phone.Number Eggs.or.Cheese
1 14/09/15 1111111111 EGGS
2 16/09/15 1111111111 CHEESE
我一直在玩过滤器,但我不确定如何在命令中使用日期和时间信息
另外,我对 R、编码和 stackfoverflow 还是个新手,所以任何关于我如何提问的反馈都将不胜感激。
最佳答案
这是使用 data.table
的尝试。
首先,我们会将 Date
转换为适当的类,以便我们对其进行排序,然后我们检查每个手机的唯一组合,看看它们是否匹配 "EGGS, CHEESE"
,然后打印整个组
library(data.table)
setDT(DT)[, Date := as.IDate(Date, "%d/%m/%y")]
DT[order(Date), if(toString(unique(Eggs.or.Cheese)) == "EGGS, CHEESE") .SD, by = Phone.Number]
# Phone.Number Date Eggs.or.Cheese
# 1: 1111111111 2015-09-14 EGGS
# 2: 1111111111 2015-09-16 CHEESE
dplyr
等价物是
library(dplyr)
DT %>%
mutate(Date = as.Date(Date, "%d/%m/%y")) %>%
arrange(Date) %>% ## This is optional if your data is already sorted
group_by(Phone.Number) %>%
filter(toString(unique(Eggs.or.Cheese)) == "EGGS, CHEESE")
# Source: local data frame [2 x 3]
# Groups: Phone.Number [1]
#
# Date Phone.Number Eggs.or.Cheese
# (date) (dbl) (fctr)
# 1 2015-09-14 1111111111 EGGS
# 2 2015-09-16 1111111111 CHEESE
关于r - 在 R 中使用日期/时间进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32625897/