2016-06-27 14 views
0

日付が入っている大きなファイルに合計列を追加しようとしています。私は毎月合計し、その月の最後の列の右側に列を追加したい。以下はDataFrame内のR列の合計列

再現可能な例である:

df <- data.frame("6Jun06" = c(4, 5, 9), 
    "13Jun06" = c(4, 5, 9), 
    "20Jun06" = c(4, 5, 9), 
    "03Jul16" = c(1, 2, 3), 
    "09Jul16" = c(1, 2, 3), 
    "01Aug16" = c(1, 2, 5)) 

したがって、この場合には、私は3つの列(6月、7月、8月と後を)持っている必要があります。

X6.Jun.06 X13.Jun.06 X20.Jun.06 Jun.Sum X03.Jul.16 X09.Jul.16 Jul.Sum X01.Aug.16 Aug.Sum 
1   4   4   4  Sum   1   1  Sum   1  Sum 
2   5   5   5  Sum   2   2  Sum   2  Sum 
3   9   9   9  Sum   3   3  Sum   5  Sum 

毎月個別に合計する方法がわかりません。ビルド・イン・サム関数があることはわかっていますが、私が試した関数は一般的な和を計算するだけで問題には合いません。

答えて

1

ですHadley Wickhamによる他のパッケージと同様に)。

library(dplyr) 
library(tidyr) 

df %>% 
    mutate(id = 1:nrow(df)) %>% 
    gather(date, value, -id) %>% 
    mutate(Month = month.abb[apply(sapply(month.abb, function(mon) {grepl(mon, .$date)}), 1, which)]) %>% 
    group_by(id, Month) %>% 
    summarize(sum = sum(value)) %>% 
    spread(Month, sum) %>% 
    left_join(mutate(df, id = 1:nrow(df)), .) %>% 
    select(-id) 
+0

パッケージを改訂していただきありがとうございます。あなたとSotosの両方の答えがうまくいった。 – Nik

1

Rは数字の前にXを挿入するので、数字で始まる変数名を使うと、やや難しくなります。しかし、ここであなたが望む金額を得ることができる1つの方法です。あなたがRに新しい、良いスタートがdplyr生態系を見て取っている場合はここ

#1. Use the package `reshape2`: 

    library(reshape2) 
    dfm <- melt(df) 

#2. Get rid of the X in the dates, then convert to a date using the package `lubridate` and extract the month: 

    library(lubridate) 
    dfm$Date <- dmy(substring(dfm$variable, 2)) 
    dfm$Month <- month(dfm$Date) 

#3. Then calculate the sum for each month using the `dplyr` package: 

    library(dplyr) 
    dfm %>% group_by(Month) %>% summarise(sum(value)) 
+0

私はあなたがOPの質問(と期待される出力)に対するソリューションを再確認する必要があると思う – Sotos

1

は、(データフレームの最後に新しい列を追加片道、

cbind(df, sapply(unique(gsub('\\d+', '', names(df))), function(i) 
          rowSums(df[grepl(i, sub('\\d+', '', names(df)))]))) 

# 6Jun06 13Jun06 20Jun06 03Jul16 09Jul16 01Aug16 Jun Jul Aug 
#1  4  4  4  1  1  1 12 2 1 
#2  5  5  5  2  2  2 15 4 2 
#3  9  9  9  3  3  5 27 6 5 
+0

ありがとうございました。それは完璧に働いた! – Nik

関連する問題