如何在一个CSV列中汇总属于另一列中的一个因子的数字?

时间:2013-03-18 10:17:14

标签: r

我是R的新手,有一个代表预算的数据文件。我想在目的栏中总结一个目的的所有价格标签。在csv中读取时,该目的会自动考虑。但是,如何将正确的价格分配给文件中有多个计数的目的并将它们相加?

我从这个链接获得了这个文件: http://www.berlin.de/imperia/md/content/senatsverwaltungen/finanzen/haushalt/ansatzn2013.xls?download.html

我在Open Office中打开它,导出.csv文件并将其命名为ausgaben.csv。

> ausgaben <- read.csv("ausgaben.csv")
> str(ausgaben)
'data.frame':   15895 obs. of  8 variables:
 $ Bereich         : Factor w/ 13 levels "(30) Senatsverwaltungen",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Einzelplan      : Factor w/ 28 levels "(01) Abgeordnetenhaus",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Kapitel         : Factor w/ 270 levels "(0100) Abgeordnetenhaus",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Titelart        : Factor w/ 1 level "Ausgaben": 1 1 1 1 1 1 1 1 1 1 ...
 $ Titel           : int  41101 41103 42201 42701 42801 42811 42821 44100 44304 44379 ...
 $ Titelbezeichnung: Factor w/ 1286 levels "Abdeckung von Geldverlusten",..: 57 973 182 67 262 257 95 127 136 797 ...
 $ Funktion        : Factor w/ 135 levels "(011) Politische Führung",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Euro            : Factor w/ 2909 levels "-1.083,0","-1.295,0",..: 539 2226 1052 1167 1983 1111 1575 2749 1188 1167 ...

在“Funktionen”中有135个等级,对应于“Euro”中的总和。我希望在“Funktionen”中获得所有相应级别的“欧元”中的所有数字并加以总结,因此我得到135欧元的价值并且可以显示在此预算中用于什么目的的费用。

2 个答案:

答案 0 :(得分:1)

这可以通过plyr ::: ddply或许多其他函数(ave,tapply等等)来完成。 我认为'欧元'不应该是一个因素,而应该是数字 - 所以请在尝试聚合之前解决这个问题。

由于我们这里没有您的数据,这是一个玩具示例:

set.seed(1234)
df <- data.frame(fac = sample(LETTERS[1:3], 50, replace = TRUE),
                 x = runif(50))

require(plyr)
ddply(df, .(fac), summarise, 
      sum_x = sum(x))
#   fac    sum_x
1   A 7.938613
2   B 6.692007
3   C 5.645078

答案 1 :(得分:0)

您可以使用xls包阅读gdata文件:

library(gdata)
ausgaben <- read.xls("ansatzn2013.xls")

首先,您需要将列Ansatz.2013.inkl..Nachtrag.in.Tsd..EUR中的值从因子转换为数字:

Euro <- as.character(ausgaben$Ansatz.2013.inkl..Nachtrag.in.Tsd..EUR)
Euro <- as.numeric(sub(",", "", Euro))

然后,您可以使用aggregate函数计算总和:

aggregate(Euro ~ ausgaben$Funktion, FUN = sum)