2017-02-03 33 views
2

スレッドmutate_each/summarise_each in dplyr: how do I select certain columns and give new names to mutated columns?をビルドしたいと思います。複数の列にmutateを適用する方法について説明します。しかし、私はsumなどの関数を使用できることを理解していますが、私は加算、乗算、除算、減算などの数学演算をどのように適用できるかはわかりません。ここでmutate_eachを使用した数学的操作

は私のデータです:

dput(DF) 
structure(list(FY = c(2015, 2016, 2017, 2030, 2015, 2016, 2017, 
2030, 2015, 2016, 2017, 2030, 2015, 2016, 2017, 2030, 2015, 2030 
), Value = c(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
19, 20, NA, NA)), .Names = c("FY", "Value"), row.names = c(NA, 
18L), class = "data.frame") 

ここに私の作業コードは、私が欲しいものをお見せします:

DF<-DF %>% 
    dplyr::group_by(FY) %>% 
    dplyr::summarise(Numbers = sum(Value,na.rm = TRUE)) %>% 
    spread(FY,Numbers) 

DF$`2016`<-DF$`2016` + DF$`2030`/3 
DF$`2017`<-DF$`2017` + DF$`2030`/3 
DF$`2015`<-DF$`2015` + DF$`2030`/3 
DF$`2030`<-NULL 

DF <- DF %>% 
gather(FY,Values,`2015`:`2017`) 

私の目標は、次の行を自動化するmutate_each()を使用することです繰り返しを減らしてください。私は2030列の1/3位を計算し、その後、私は繰り返しを最小限に抑えるために何ができる2016

DF$`2016`<-DF$`2016` + DF$`2030`/3 
    DF$`2017`<-DF$`2017` + DF$`2030`/3 
    DF$`2015`<-DF$`2015` + DF$`2030`/3 

に戻って、それを追加するためのmutateどのように使用できるかわからないのですか?操作上の適用後


予想される出力:dplyr私たちすることができますgroup_byFY

dput(DF) 
structure(list(FY = c("2015", "2016", "2017"), Values = c(62.6666666666667, 
66.6666666666667, 70.6666666666667)), row.names = c(NA, -3L), .Names = c("FY", 
"Values"), class = c("tbl_df", "tbl", "data.frame")) 
+1

mutate_eachが列を作成しますが、ここではあなたの期待される出力がakrun @ – akrun

+0

をまとめている使用することができます - 私が間違っているなら、私を修正してください。データセットの各列に関数を適用するのに 'mutate_each'が使われていませんか?したがって、私のデータセット(上の)には '2015,2016,2017'の3つのカラムがあると仮定して、各カラムで' mutate_each'を使って数学演算を行うことはできませんか?私は興味がある。すべてのあなたの助けを前もってありがとう... – watchtower

答えて

1

我々はdata.table

library(data.table) 
setDT(DF)[FY %in% 2015:2017, .(NewValue = sum(Value, na.rm = TRUE) + 
        sum(DF[FY==2030]$Value, na.rm=TRUE)/3), by = FY] 
#  FY NewValue 
#1: 2015 62.66667 
#2: 2016 66.66667 
#3: 2017 70.66667 
2

。各グループのsumを取得し、sumFY 2030の1/3を追加します。

library(dplyr) 
DF %>% 
    group_by(FY) %>% 
    summarise(Sum = sum(Value, na.rm = TRUE)) %>% 
    mutate(NewValue = Sum + Sum[FY == '2030']/3) %>% 
    filter(FY != 2030) 

# FY Sum NewValue 
# <dbl> <dbl> <dbl> 
#1 2015 44 62.66667 
#2 2016 48 66.66667 
#3 2017 52 70.66667 
関連する問題