我回来了我的调查数据。
这次,我需要从数据中删除一组特定的行。在我们的调查(自动电话调查)中,调查工具将在呼叫期间尝试三次,以提示被调查者输入答复。问题三个超时后,调查工具挂断。当呼叫转到某人的语音信箱时,通常会发生这种情况。
我想在发生这种情况时对其进行识别,以便将其从计算通话时间中删除。
这是一个示例数据集:
这是15位受访者,调查工具与受访者(实质上是他们的电话)之间的每次互动。
我正在寻找的模式在“交互”列中如下所示:
不必介绍。它可以是调查中提示被调查者作出答复的任何部分。但是,必须将其夹在“答案”和“超时。呼叫失败”之间。 (失败),或者在“答案”和“部分”之间(有人停止响应),或者在“答案”和“入队”之间(我们将调查中断,然后将它们分类为完全或部分)。
这是另一个:
我确实尝试将从昨天的解决方案(关于游程长度编码)中学到的知识应用于我的其他索引问题,但是我无法使它丝毫起作用。所以,我在这里。
以下是数据框的代码:This goes to a Google Drive text editor with the code
答案 0 :(得分:1)
如果我正确理解了问题,则下面的函数将删除带有"Answer"
的行和失败值(问题中有3个这样的值)之间的所有行。
要查找默认值的列名称为"Interactions"
,并且第一个答案和失败值也分配了默认值。
请注意,所有匹配指令都区分大小写。
removeRows <- function(X, col = "Interaction",
ans = "Answer",
fail = c("Timeout. Call failed.", "Partial", "Enqueueing call"))
{
a <- grep(ans, X[[col]])
f <- which(X[[col]] %in% fail)
a <- a[findInterval(f, a)]
for(i in seq_along(a)){
X[[col]][a[i]:f[i]] <- NA_character_
}
Y <- X[complete.cases(X), , drop = FALSE]
Y
}
removeRows(survey_data)