2017-02-15 8 views
0

こんばんは、グループ化とRにデータの総計

私はこの

FY  Type  Total 
2014 State $5,000 
2014 Federal $2,596 
2014 State $5,123 
2014 Federal $2,567 
2013 State $5,555 
2013 Federal $2,784 
2013 State $5,562 
2013 Federal $2,556 

どのようにRにFYとタイプの両方で合計を取得することができるだろうように見えるデータを持っていますか?

それは次のように見ることができるようにするには:

FY  Type Total 
2013 Federal $5,340 
2013 State $11,117 
2014 Federal $5,163 
2014 State $10,123 
+0

ありがとうございました! 私はあなたが何を言っているのか分かりません。数字に変換しますか?合計はRで表されます。 2つのステップを少し落とすことができますか? –

+1

'$ 5,000'はRの数字ではありません。その中には' $ 'と'、 'がありますので、数字ではありません。 – thelatemail

+0

可能な複製http://stackoverflow.com/questions/1660124/how-to-sum-a-variable-by-group – akrun

答えて

2

あなたはそれが簡単な集計だ、合計を得るために数値に変換する必要があります。ここではtransformを使用して、Total列を数値に一時的に変換し、元のデータは変更しません。

aggregate(
    Total ~ Type + FY, 
    transform(df, Total = as.numeric(gsub("\\D", "", Total))), 
    sum 
) 
#  Type FY Total 
# 1 Federal 2013 5340 
# 2 State 2013 11117 
# 3 Federal 2014 5163 
# 4 State 2014 1

xtabsで出力が少し異なります。

xtabs(Total ~ ., transform(df, Total=as.numeric(gsub("\\D", "", Total)))) 
#  Type 
# FY  Federal State 
# 2013 5340 11117 
# 2014 5163 1
+0

ありがとうございます!私はあらかじめ適切な通貨にそれをフォーマットするようにそれをコード化しました。それが最初の数字だった場合、コードはどのように変化しますか? –

1

tidyverseを使用できます。 「FY」、「種類」でグループ化した後、parse_numberと「合計」の数値部分を抽出接頭辞として$sumpasteを取得

library(tidyverse) 
df1 %>% 
    group_by(FY, Type) %>% 
    summarise(Total = dollar_format()(sum(parse_number(Total)))) 
# FY Type Total 
# <int> <chr> <chr> 
#1 2013 Federal $5,340 
#2 2013 State $11,117 
#3 2014 Federal $5,163 
#4 2014 State $10,123 

注:dollar_formatscalesparse_numberからreadrsummariseからです、group_bydplyr


から我々はまた、base R

0123から rowsumを使用することができます
rowsum(as.numeric(gsub("[^0-9.]+", "", df1$Total)), interaction(df1[-3])) 
+0

ありがとうございます!私はあらかじめ適切な通貨にそれをフォーマットするようにそれをコード化しました。それが最初の数字だった場合、コードはどのように変化しますか? –

+0

@ laura 'parse_number'は文字が散在している他の形式であっても数値部分を抽出すると思います。あなたはそれをテストしましたか? – akrun

関連する問題