有条件地标记重复对

时间:2014-01-23 15:22:50

标签: r duplicates

id=c(2, 2, 3, 3, 4, 4)
TimeofCall=c("4:00", "13:00", "NA", "9:00", "NA", "NA")
mydata <- data.frame(id, TimeofCall)

我想创建第三个变量,将任何重复对中具有Time of Call的重复项标记为1.

例如:

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

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

1 个答案:

答案 0 :(得分:2)

这样的事情怎么样:

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值,您可以使用略有不同的方法。