这个答案表明对变量之间的关系进行图形探索是有价值的,并说明了一种有用的方法。然后,它提供了一个简单的解决方案,可以快速自动识别可能由给定分类变量表示的所有可能变量。
您可以通过在数据框中绘制年龄类别和所有数值变量的散点图矩阵来以图形方式进行探索。如果有很多变量,请按年龄汇总每个变量,并检查它们是否属于非重叠区间。
这里有一些示例数据用于说明。分组变量是V1,但我们假设我们不知道。
#
# Create data for testing.
#
n.obs <- 100
n.vars <- 4
X <- as.data.frame(matrix(round(runif(n.obs*n.vars, 15, 40), 0), n.obs))
#
# Create the dummary variable.
#
cutpoints <- c(-Inf, 20, 25, 30, Inf)
Age <- data.frame(group=cut(X$V1, cutpoints))
这个散点图矩阵清楚地表明变量V1对应于 中的年龄组group,因为它是group行或列中由散点图清楚划分的唯一变量:
colors <- rainbow(length(cutpoints), alpha=0.6)
names(colors) <- unique(Age$group)
pairs(cbind(X, Age), pch=21, bg=colors[Age$group])

我建议在任何情况下都使用这种方法,因为如果没有找到与变量匹配的age变量(如下所示),您可以通过此图快速识别几乎匹配的任何变量。这对于取证活动很有用,例如识别数据表中的不一致。
R按年龄汇总的实现用于tapply将数据按年龄分组并by计算其范围。如果这些不重叠(按 排序by),则您有一个与年龄对应的候选人。
#
# Identify all columns of X that might match Age.
# The result is a logical vector indicating which fields of X match.
#
candidates <- sapply(names(X), function(f) {
groups <- tapply(X[[f]], Age)
boundaries <- unlist(by(X[f], groups, range))
identical(order(boundaries), 1:length(boundaries))
})
message(paste0("Possible variables are (", paste(names(X)[candidates],
collapse=","), ")."))
输出是
可能的变量是 (V1)。
尽管此示例使用了通常存储在数据库中的形式的数据(即,作为分类变量),但当数据框采用问题中给出的格式时,它不会改变工作Age:唯一的行Age用于分组。