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)
有关如何创建这个有条件地标记重复对的新变量的任何见解?
答案 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
值,您可以使用略有不同的方法。