0

私はアメリカのすべての交通システムのデータベースを使用しており、さまざまな機関を比較しようとしています。それぞれのケースは、組織の特定の部分です。たとえば、バス路線は地下鉄とは別です。特定の機関のすべてのケースの値を組み合わせたいと思います。

基本的に、各「Trs_Id」の各列の値を合計し、残りを削除したいと思います。このデータフレームは、営業費用(「opex」)の内訳です。これが私のデータセットがRでどのように見えるかです:

> colnames(opex)
[1] "Trs_Id"                  "Mode_Cd"                
[3] "Service_Cd"              "Expense_Category_Desc"  
[5] "Op_Sal_Wage_Amt"         "Other_Sal_Wage_Amt"     
[7] "Fringe_Benefit_Amt"      "Service_Costs_Amt"      
[9] "Fuel_Lubricant_Amt"      "Tire_Tube_Amt"          
[11] "Other_Mat_Sup_Amt"       "Utility_Amt"            
[13] "Casuality_Liability_Amt" "Tax_Amt"                
[15] "In_Report_Amt"           "Sep_Report_Amt"         
[17] "Misc_Expense_Amt"        "Expense_Transfer_Amt"   
[19] "Ada_Related_Amt"        
> NROW(opex)
[1] 6956
> id_nm <- table(opex$Trs_Id)
> NROW(id_nm)
[1] 616
4

2 に答える 2

4

問題を示す再現可能な例を作成しなかったにもかかわらず、パッケージのddply関数を使用して解決できると思いますがplyr、基本関数を使用することもできますaggregate。私はでそれをすることを好みますddply

data.frameを理解するための乱数を次に示します。

 #install.packages('plyr')
 library(plyr)

 set.seed(007) # for the example being reproducible
 Mode_Cd1 <- replicate(4,sample(LETTERS[1:26], 1, replace=T)) # random genereation of variable Mode_Cd
 Mode_Cd2 <- replicate(4,sample(LETTERS[1:26], 1, replace=T)) 

 data_set <- data.frame(Trs_Id = rep(paste('00', 1:4, sep=''), each=3),
            Mode_Cd = sample(paste(Mode_Cd1, Mode_Cd2, sep=''), 12, replace=T),
            Service_Cd =  sample(paste(Mode_Cd2, Mode_Cd1, sep=''), 12, replace=T),
            Op_Sal_Wage_Amt = rnorm(12,5000,100),
            Other_Sal_Wage = rnorm(12,3000,800))

 data_set # this is how my random data_set looks like
   Trs_Id Mode_Cd Service_Cd Op_Sal_Wage_Amt Other_Sal_Wage
1     001      ZG         ID        4910.620       2213.558
2     001      KU         UK        4969.267       2779.149
3     001      ZG         ZB        4999.518       2303.319
4     002      ZG         ZB        5098.816       3574.968
5     002      BZ         ZB        5083.975       3088.522
6     002      ZG         GZ        5070.534       2937.227
7     003      KU         ID        5130.596       2663.608
8     003      ZG         UK        4861.200       2550.299
9     003      DI         ZB        5127.292       3798.011
10    004      ZG         UK        5018.419       2115.896
11    004      BZ         ID        5075.228       2886.170
12    004      KU         UK        5059.175       3251.996

 ddply(data_set,.(Trs_Id),numcolwise(sum)) # The sum you want.
  Trs_Id Op_Sal_Wage_Amt Other_Sal_Wage
1    001        14879.40       7296.026
2    002        15253.33       9600.717
3    003        15119.09       9011.918
4    004        15152.82       8254.062
于 2012-08-06T16:12:24.210 に答える
2

Jilberのデータセットを使用して、aggregate()でこれを処理することもできます。

aggregate(data_set[, 4:5], list(data_set$Trs_Id), sum)

たとえば、列番号は4:5ではなく5:19になります。

于 2012-08-07T02:21:26.690 に答える