expand.grid
假设我们使用 @SimonO101 的扩展样本数据,我建议使用factor
.
首先,为三列创建我们将拥有的“是”和“否”的所有组合。
facLevs <- expand.grid(c("yes", "no"), c("yes", "no"), c("yes", "no"))
facLevs
# Var1 Var2 Var3
# 1 yes yes yes
# 2 no yes yes
# 3 yes no yes
# 4 no no yes
# 5 yes yes no
# 6 no yes no
# 7 yes no no
# 8 no no no
现在,我们将考虑列的组合。我们可以使用do.call(paste, ...)
比 更容易地做到这一点apply(mydf, ...)
。我们将其转换为as.numeric
以获取数字组。
mydf$pattern <- as.numeric(factor(do.call(paste, mydf[1:3]),
do.call(paste, facLevs)))
mydf
# Visit1 Visit2 Visit3 pattern
# 1 yes no no 7
# 2 yes no yes 3
# 3 yes yes yes 1
# 4 no yes no 6
# 5 yes no yes 3
如您所见,pattern = 7
对应于我们将在facLevs
data.frame
我们创建的第 7 行中找到的值。
为方便起见,这里是mydf
:
mydf <- structure(list(Visit1 = c("yes", "yes", "yes", "no", "yes"),
Visit2 = c("no", "no", "yes", "yes", "no"),
Visit3 = c("no", "yes", "yes", "no", "yes")),
.Names = c("Visit1", "Visit2", "Visit3"),
class = "data.frame", row.names = c("1", "2", "3", "4", "5"))