在dataframe中创建列,作为R中条形图竞态可视化先前列的总和
我试图计算公司每年缴纳的税款,并显示每年之后缴纳的税款总额,使用前几年并汇总 在这样做之后,我想展示(但这超出了我的问题,只是澄清我想要什么) 我用一种非常粗糙的手工方式,使用在dataframe中创建列,作为R中条形图竞态可视化先前列的总和,r,dplyr,R,Dplyr,我试图计算公司每年缴纳的税款,并显示每年之后缴纳的税款总额,使用前几年并汇总 在这样做之后,我想展示(但这超出了我的问题,只是澄清我想要什么) 我用一种非常粗糙的手工方式,使用mutate 我承认这个解决方案很糟糕,我想学习一种更优雅的方式(尤其是使用dplyr)。我做了我的研究,但没有找到如何做,也许在我的搜索中问了一个错误的问题 company_payments_clean %>% mutate(Sum2007 = `2006` + `2007`,
mutate
我承认这个解决方案很糟糕,我想学习一种更优雅的方式(尤其是使用dplyr
)。我做了我的研究,但没有找到如何做,也许在我的搜索中问了一个错误的问题
company_payments_clean %>% mutate(Sum2007 = `2006` + `2007`,
Sum2008 = `2006` + `2007` + `2008`,
Sum2009 = `2006` + `2007` + `2008` + `2009`,
Sum2010 = `2006` + `2007` + `2008` + `2009` + `2010`,
Sum2011 = `2006` + `2007` + `2008` + `2009` + `2010` + `2011`,
Sum2012 = `2006` + `2007` + `2008` + `2009` + `2010` + `2011` + `2012`,
Sum2013 = `2006` + `2007` + `2008` + `2009` + `2010` + `2011` + `2012` + `2013`,
Sum2014 = `2006` + `2007` + `2008` + `2009` + `2010` + `2011` + `2012` + `2013` + `2014`,
Sum2015 = `2006` + `2007` + `2008` + `2009` + `2010` + `2011` + `2012` + `2013` + `2014` + `2015`,
Sum2016 = `2006` + `2007` + `2008` + `2009` + `2010` + `2011` + `2012` + `2013` + `2014` + `2015` + `2016`,
Sum2017 = `2006` + `2007` + `2008` + `2009` + `2010` + `2011` + `2012` + `2013` + `2014` + `2015` + `2016` + `2017`) %>%
select(`Name of organisation`, Sum2007, Sum2008, Sum2009, Sum2010, Sum2011, Sum2012, Sum2013, Sum2014, Sum2015, Sum2016, Sum2017)
我的数据如下所示(这是一个开放数据,可在线获取)
请告知 您只需
apply()
cumsum()
对于barplot()
,rownames
是合适的,因为我们可以将它们用于颜色和图例。以下是基本条形图:
dat <- `rownames<-`(
t(apply(company_payments_clean[-1], MARGIN=1, cumsum)),
company_payments_clean[[1]]
)
b <- barplot(dat, horiz=TRUE, col=2:7, yaxt="n")
mtext(colnames(dat), 2, at=b, las=1)
legend("bottomright", col=2:7, pch=15, rownames(dat), bty="n", cex=.9)
你也可以同时做这两件事:)你可以简单地
apply()
cumsum()
对于barplot()
,rownames
是合适的,因为我们可以将它们用于颜色和图例。以下是基本条形图:
dat <- `rownames<-`(
t(apply(company_payments_clean[-1], MARGIN=1, cumsum)),
company_payments_clean[[1]]
)
b <- barplot(dat, horiz=TRUE, col=2:7, yaxt="n")
mtext(colnames(dat), 2, at=b, las=1)
legend("bottomright", col=2:7, pch=15, rownames(dat), bty="n", cex=.9)
您也可以同时执行这两项操作:)这里有一个解决方案,使用
dplyr
和tidyr
获得与上面相同的结果,因为我们可以对长数据进行分析,并轻松地将其转回到绘图所需的宽格式。我确保按年份对数据进行排序,以防它不总是在最终的数据集中
library(tidyr)
图书馆(dplyr)
公司付款\u清洁%>%
pivot_更长(cols=-`Name of organization`,Name_to=“year”)%>%
分组人(`Name of organization`)%>%
安排(年)%>%
突变(税和=总和(值))%>%
pivot_加宽(id_cols=-值,
姓名_from=年份,
名称\u prefix=“Sum”,
值(从=税(和)
这里有一个解决方案,使用dplyr
和tidyr
获得与上面相同的结果,因为我们可以对长数据进行分析,并轻松将其转回到绘图所需的宽格式。我确保按年份对数据进行排序,以防它不总是在最终的数据集中
library(tidyr)
图书馆(dplyr)
公司付款\u清洁%>%
pivot_更长(cols=-`Name of organization`,Name_to=“year”)%>%
分组人(`Name of organization`)%>%
安排(年)%>%
突变(税和=总和(值))%>%
pivot_加宽(id_cols=-值,
姓名_from=年份,
名称\u prefix=“Sum”,
值(从=税(和)
如果您将所有年份放在一列中(tidyr::gather
/tidyr::pivot\u longer
)。否则,每年都有单独的列会使操作数据变得更加困难和低效。是的,当然,但这是有意的,因为可视化不是在R中完成的,而是使用另一个工具,这就特别需要这样的结构。您可以随时进行操作并将数据更改回广域结构。或者您可以编写一个函数,并将其映射到特定的列中。如果您将所有年份都放在一列中(tidyr::gather
/tidyr::pivot\u longer
),可能会更容易。否则,每年都有单独的列会使操作数据变得更加困难和低效。是的,当然,但这是有意的,因为可视化不是在R中完成的,而是使用另一个工具,这就特别需要这样的结构。您可以随时进行操作并将数据更改回广域结构。或者您可以编写一个函数,并在/处映射它。谢谢,这是一个很好的选择,也是这里唯一的问题-它会删除第一列中的公司名称。@Oleksiy您需要它们作为额外的列还是行名?我需要它们,而不是理想的2006-2017。这就是为什么在变异后,我使用%%>%select
只选择新创建的列和组织名称。谢谢,这是一个很好的选择,也是这里唯一的问题-它会删除带有公司名称的第一列。@Oleksiy您需要它们作为额外列还是行名?我需要它们,而不是理想的2006-2017年。这就是为什么在变异后我使用%%>%select
只选择新创建的列和组织名称。太好了,谢谢!我更喜欢tidyverse代码。但是仍然使用collect
来处理此代码:)太好了,谢谢!我更喜欢tidyverse代码。但仍然使用collect
来处理此代码:)
dat <- `rownames<-`(
t(apply(company_payments_clean[-1], MARGIN=1, cumsum)),
company_payments_clean[[1]]
)
b <- barplot(dat, horiz=TRUE, col=2:7, yaxt="n")
mtext(colnames(dat), 2, at=b, las=1)
legend("bottomright", col=2:7, pch=15, rownames(dat), bty="n", cex=.9)
dat1 <- cbind.data.frame(`Name of organisation`=company_payments_clean[[1]],
t(apply(company_payments_clean[-1], MARGIN=1, cumsum)))
dat1[, 1:7]
# Name of organisation 2006 2007 2008 2009 2010 2011
# 1 ?????? ??? ??? 0 0 0 0 42064000 42064000
# 2 ??????? ????????? 0 0 0 0 0 0
# 3 ????????? ???? 0 0 0 63791000 63791000 63791000
# 4 ????n Erch 0 0 0 736145300 1247879800 2089234700
# 5 ADAE 0 0 0 0 0 0
# 6 Adamas mauntin 0 0 0 0 188945000 188945000