在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