我正在尝试比较两个变量,并根据它们的相关性创建一个分组条形图。流失列是"是"或"否"。合同列可以是"逐月","一年"或"两年"。我最终想要的是一个分组条形图,其中包含每种合同类型的Yeses和Nos总数。例如,每月合约类型在Churn列中有2220个Nos和1655个Yeses。
我必须将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 noobie来解决这个问题。其次,我无法将其作为带有此数据的分组条形图。我试图遵循这个:http://www.r-graph-gallery.com/48-grouped-barplot-with-ggplot2/但是因为cn和cv向量没有7032&#34;行&#34; (就像我的数据一样),它不起作用。
是否可以说:图表X列的每个级别所说的总次数&#34;是&#34;在Y列旁边,表示&#34; No&#34;在Y列中为每个级别。我一直在玩rpart,plot和ggplot试图解决这个问题。
只是做plot(cd$Contract, cd$Churn)
给了我一个堆叠的图形,这是我想要的,除了有点难以阅读。做barplot(cv, ylab="Churn", names.arg=cn, cex.names=0.5, las=2)
给我的条形图没有分组,也有点难以阅读。
答案 0 :(得分:1)
我认为最适合您的行动方法是创建一个只包含您想要显示的总和的新矢量。 使用正确的顺序创建条形图名称的另一个向量,并将这两个向量添加到数据框中。 然后使用您提供的源中的分组方法。 如果你从那里拿到例子: 条件将变为(&#34;是&#34;,&#34;不&#34;,&#34;是&#34;,&#34;不&#34;,&#34;是&#34;,& #34;无&#34) 物种将成为合同类型 值是您要显示的总和。 这个新的数据框将与给定的例子一起使用。