【问题标题】:Flag duplicate pairs conditionally有条件地标记重复对
【发布时间】:2014-01-23 15:22:49
【问题描述】:
id=c(2, 2, 3, 3, 4, 4)
TimeofCall=c("4:00", "13:00", "NA", "9:00", "NA", "NA")
mydata <- data.frame(id, TimeofCall)

我想创建第三个变量,将任一重复对中具有调用时间的任何重复标记为 1。

例如:

attempt=c("1", "1", "1", "1", "0", "0")
newdata <- data.frame(id, TimeofCall, attempt)

对如何创建这个有条件地标记重复对的新变量有任何见解吗?

【问题讨论】:

    标签: r duplicates


    【解决方案1】:

    这样的事情怎么样:

    within(mydata, {
      attempt <- ave(as.character(TimeofCall), id, 
                     FUN = function(x) as.numeric(as.logical(sum(x != "NA"))))
    })
    #   id TimeofCall attempt
    # 1  2       4:00       1
    # 2  2      13:00       1
    # 3  3         NA       1
    # 4  3       9:00       1
    # 5  4         NA       0
    # 6  4         NA       0
    

    使用data.table,这更加紧凑:

    library(data.table)
    DT <- data.table(mydata)
    DT[, attempt := as.numeric(as.logical(sum(TimeofCall != "NA"))), by = id]
    DT
    #    id TimeofCall attempt
    # 1:  2       4:00       1
    # 2:  2      13:00       1
    # 3:  3         NA       1
    # 4:  3       9:00       1
    # 5:  4         NA       0
    # 6:  4         NA       0
    

    请注意,我采用这种方法是因为“TimeofCall”列中的“NA”值实际上是字符串,而不是 NA。如果它们是实际的 NA 值,您可以使用稍微不同的方法。

    【讨论】:

    • Re:您的第一个解决方案--> 如果我想根据两个变量检查​​重复项怎么办?例如,即 ID 和类型。这可能吗?
    • @Tan,您的意思是两个或多个“分组”变量吗?那么是的,没问题。只需使用 ave(as.character(TimeofCall), groupingVariable1, groupingVariable2, ... 之类的构造即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2015-11-18
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多