检查日期是否相同

时间:2019-07-26 15:34:02

标签: r lubridate

我正在尝试编写代码以检查列中的日期是否相同。该行将按ID分组,因此,如果组中的任何日期不同,则会对其进行标记。

这是我的数据框(代码):

df <- structure(list(ID = c("P40", "P40", "P40", "P40", "P42", "P42"),
                     Date = dmy(c(26072013, 26072013, 2092012, 23082012, 01072014, 01072014))),
                class = "data.frame", row.names = c(NA, -6L))

表格形式:

ID       Date
P40     2013-07-26
P40     2013-07-26
P40     2012-09-24
P40     2012-08-23
P42     2014-07-01
P42     2014-07-01 

这是我想要实现的:

ID    Contsistent
P40      No
P42      Yes

3 个答案:

答案 0 :(得分:3)

一个选项是

library(dplyr)
df %>%
    group_by(ID) %>% 
    summarise(Consistent = factor(n_distinct(Date) == 1, 
            levels = c(FALSE, TRUE), labels = c("No", "Yes")))
# A tibble: 2 x 2
#  ID    Consistent
#  <chr> <fct>     
#1 P40   No        
#2 P42   Yes      

或与data.table

library(data.table)
setDT(df)[, .(Consistent = uniqueN(Date) == 1), .(ID)]
#   ID Consistent
#1: P40      FALSE
#2: P42       TRUE

答案 1 :(得分:2)

也许:

function AM2(e) {
  var form_name = "Form Responses 1";
  var open_name = "OPEN";

  var workbook = SpreadsheetApp.getActiveSpreadsheet();
  var form_ws = workbook.getSheetByName(form_name);
  var open_ws = workbook.getSheetByName(open_name);

  var frng = form_ws.getRange("A1:A").getValues();
  var frow = frng.filter(String).length;

  var gid= form_ws.getSheetId().toString();
  var gid_and_data = gid + '&range=D' + frow + '", "' + e.values[2]
  var link_var = '=HYPERLINK("https://docs.google.com/spreadsheets/d/sheet_address_redacted_for_post/edit#gid=' + gid_and_data +'")'

  open_ws.appendRow(['NEW',e.values[1],'',link_var,e.values[4]]);
  var rng = open_ws.getRange("A1:A").getValues();
  var row = rng.filter(String).length;

  var rule = SpreadsheetApp.newDataValidation().requireValueInList(['NEW', 'OPEN', 'COMPLETE', 'PENDING'], true).build();

  open_ws.getRange(row, 1).setDataValidation(rule);

}

输出:

library(dplyr)

df %>%
  group_by(ID) %>%
  summarise(Consistent = c("No", "Yes")[(n_distinct(Date) == 1) + 1])

答案 2 :(得分:1)

为此,我们可以使用R基的聚合

# Check Date for each ID in df
aggregate(Date ~ ID, data= df, function(ID_i){ 
# if there is only one unique Date value in ID_i then the function gives "Yes", otherwise it gives a "No"
          ifelse(length(unique(ID_i)) == 1, "Yes", "No")})

   ID Date
1 P40 No
2 P42 Yes
相关问题