【问题标题】:Using Date/Time to Filter in R在 R 中使用日期/时间进行过滤
【发布时间】:2015-09-17 08:37:02
【问题描述】:

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

我正在尝试创建一个子集,其中包括过去曾指示鸡蛋然后拨打奶酪的所有电话号码。该子集将包括对这些电话号码的所有观察结果,如下所示。

      Date Phone.Number Eggs.or.Cheese
1 14/09/15   1111111111           EGGS
2 16/09/15   1111111111         CHEESE

我一直在玩过滤器,但我不确定如何在命令中使用日期和时间信息

另外,我对 R、编码和 stackfoverflow 还是很陌生,所以如果我能提出任何关于我如何提问的反馈,我将不胜感激。

【问题讨论】:

  • Date 作为一个实际的Date 课程不是更好吗?这样您就可以按它订购了吗?
  • 可能是这样,我该怎么做?
  • 还有,你在乎外观顺序吗?例如,如果某个电话号码的“EGGS”之前出现“CHEESE”,您是否也要选择它?
  • 是的,我只对“鸡蛋”出现在“奶酪”之前的情况感兴趣。 (原谅这些例子,我应该在写这篇文章之前吃过早餐)

标签: r dplyr


【解决方案1】:

这里尝试使用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

【讨论】:

  • 工作如梦,非常感谢大卫的帮助。有没有我可以按下的按钮给你买啤酒?
猜你喜欢
  • 2019-01-27
  • 2019-02-25
  • 2023-04-05
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
相关资源
最近更新 更多