我有一个数据框,其中每一行都是一个唯一用户,并且有一列表示每个用户的选择以及背景变量的列。在实际数据集中,有 800 多个选项,背景变量可以有 2 到 60 多个级别。
我正在做的是根据各种不同的分组组合查找每个选择的总计数。我已经成功地做到了,但我现在想以一种有意义的方式命名它们。
对这个问题的第一部分有帮助的来源: How to use aggregate with a list of column names
# sample data
d <- data.frame(user_id = 1:12, choice = rep(c("apple", "banana", "banana"),4), cond1 = c("a1", "a1", "a2", "a1", "a2", "a1", "a2", "a2", "a3", "a3", "a3", "a3"), gender = c(rep(c("F", "M"), 6)))
# list of the different grouping combinations (choice will always be one of these terms)
c1 <- list(c("choice", "cond1"), c("choice", "cond1","gender"))
# variable to be aggregated over
v1 <- c("user_id")
varNames <- c("cond1Ct", "cond1_GenderCt") # for later use
counts <- mapply(FUN= function(z,y, ...) {aggregate(d[ , y], by=d[z], ...)},
c1, v1, MoreArgs=list(FUN=length) )
# assign each part of the output to its own dataframe for later use
cond1 <- counts[[1]]
cond1_Gender <- counts[[2]]
所以这到目前为止有效。
正如R 中聚合中的 Name 列所看到的那样,可以将列名分配给您正在聚合的变量。我无法让它在 mapply 函数调用中工作。这是我的主要问题 --- 我如何自动命名每个分组组合的列表变量。
我这样做的蛮力方法:
# rename the column labeled 'x' in a meaningful way ... should be possible to do using varnames (defined above)
cond1_Gender$cond1_Gender_Ct <- cond1_Gender$x
cond1$cond1_Ct <- cond1$x
cond1_Gender$x <- NULL
cond1$x <- NULL
cond1_Gender
# bring back the now meaningfuly named columns into the original dataframe
dUse <- merge(merge(d, cond1), cond1_Gender)
# efficiency of this for large dataset and 8+ aggregated datasets???
dUse_Cond <- dUse[!duplicated(dUse[c("choice", "cond1")]),] # later: use item from list here!
# has extra columns that just get ignored ... but that could be potentially confusing for later users
# repeat for all other grouping variable combinations
# dUse_CondGender <- dUse[!duplicated(dUse[c1[[2]],])] # (DOES NOT WORK!)
如何以更自动化的方式完成此命名,以便它可以跨数据文件和多个变量工作?
更大的图片:这只是我想要绘制每个分组组合的最佳选择的频率的更大情况的一部分。我有代码可以确定每个分组组合中评价最高的职业,并为分组类别中的每个级别绘制这些频率。
添加 3-25-14:澄清出现这种情况的背景,尽管可能超出了本问题的范围。
个人保存了一个选择(从一长串列表中)。我想知道(以图形和数字方式),对于背景分组变量的不同组合,哪些选择是“最频繁”(及其相应的频率):即,五年级男性的最频繁选择,或 10 年级学生的最频繁选择状态 X,或所有处于治疗状态的高中生。我有代码可以让我完成每个单独的背景分组:制表(如在这个问题中所做的那样),找到“最常见”的选择,计算该组的频率统计数据,以及基于该组中涉及的变量绘制图表。总体而言,我正在尝试使其更加通用和矢量化,以便后续用户更轻松地定义他们想要查看的背景变量组合。
谢谢!我希望这是有道理的......我在这里阅读了很多问题和答案,但之前没有尝试过发布。