r - 在 R 中使用日期/时间进行过滤

标签 r dplyr

我正在使用 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/

相关文章:

r - r 中的 Order() 函数排序不正确

r - 数据框中的条件计数

r - 使用 dplyr、group_by 和 mutate() 或汇总 () & str_c() 或 paste() & 折叠连接字符串/行,但保持 NA 和所有字符串

r - 使用 key 将数字列转换为具有不同标签的因子

r - R 中 group 的每个变化增加 1

r - 格式化多个 geom_sf 图例

r - 在 nlme 和 lme4 中拟合相同的模型

r - 安装 flextable 库时出错

r - 如果值存在于 r 的其他列中,如何创建列标记?

r - dplyr: group_by 和 which