我正在尝试编写代码以检查列中的日期是否相同。该行将按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
答案 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