【问题标题】:R Grouped Bar Plots with Conditions带条件的 R 分组条形图
【发布时间】:2018-01-03 02:11:42
【问题描述】:

我正在尝试比较两个变量并根据它们的相关性创建一个分组条形图。流失列是“是”或“否”。合同栏可以是“每月”、“一年”或“两年”。我最终想要的是一个分组条形图,其中包含每种合同类型的 Yeses 和 Nos 总数。例如,逐月合约类型在流失列中有 2220 个否,1655 个是。

我必须将 Churn 与其他两列性质相似的列进行比较,所以起初我试图创建一个函数,循环遍历每列的级别,提取信息并将其转储到向量中,但随后开始读取在 R 的循环中添加向量不是 最佳实践。

所以我花了很长时间来解决这个问题:

contractLevels = levels(cd$Contract)
c1n = length(cd$Contract[which(cd$Churn == "No" & cd$Contract == contractLevels[1])])
c1y = length(cd$Contract[which(cd$Churn == "Yes" & cd$Contract == contractLevels[1])])
c2n = length(cd$Contract[which(cd$Churn == "No" & cd$Contract == contractLevels[2])])
c2y = length(cd$Contract[which(cd$Churn == "Yes" & cd$Contract == contractLevels[2])])
c3n = length(cd$Contract[which(cd$Churn == "No" & cd$Contract == contractLevels[3])])
c3y = length(cd$Contract[which(cd$Churn == "Yes" & cd$Contract == contractLevels[3])])
cv <- c(c1n, c1y, c2n, c2y, c3n, c3y)
cv
cn <- c(paste(contractLevels[1], "No"), paste(contractLevels[1], "Yes"), paste(contractLevels[2], "No"), paste(contractLevels[2], "Yes"), paste(contractLevels[3], "No"), paste(contractLevels[3], "Yes"))

我仍然想让它尽可能容易重用,所以我没有输入实际的新列名 (cn)。首先,必须有一种更简单的方法来完成上述操作,而我只是一个 R 菜鸟,无法弄清楚。其次,我不能让它成为包含这些数据的分组条形图。我试图遵循这一点:http://www.r-graph-gallery.com/48-grouped-barplot-with-ggplot2/ 但由于 cn 和 cv 向量没有 7032 个“行”(就像我的数据一样),它不起作用。

是否可以这样说:将 X 列的每个级别在 Y 列中说“是”的总次数与每个级别在 Y 列中说“否”的总次数一起绘制图表。我一直在玩 rpart、plot 和 ggplot 试图解决这个问题。

只是做plot(cd$Contract, cd$Churn) 给了我一个堆叠图,这有点像我想要的,除了有点难以阅读。执行barplot(cv, ylab="Churn", names.arg=cn, cex.names=0.5, las=2) 给了我未分组的条形图,也有点难以阅读。

【问题讨论】:

  • 请使您的示例可重现,即提供一些示例数据。此外,如果您可以显示所需的输出,即使它只是一个手绘草图也会很有帮助。

标签: r plot ggplot2


【解决方案1】:

我认为对您来说最好的做法是创建一个仅包含您想要显示的总和的新向量。 以正确的顺序创建另一个带有条形名称的向量,并将两者添加到数据框中。 然后使用您提供的来源中的分组方法。 如果您从那里举个例子,那么: 条件将变为 ("yes","no","yes","no","yes","no") 物种将成为合约类型 value 是您要显示的总和。 这个新的数据框将适用于给定的示例。

【讨论】:

  • 你是一个巫师,我希望我能更多地支持这个。工作得很好,尽管我仍然希望能够稍微缩短代码,因为我必须使用另外两个变量来做到这一点。我将再次使用函数,但这确实有效,以防函数失败。
猜你喜欢
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 2016-07-11
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多