私は初心者で、R の高度な機能にあまり詳しくありません。なぜ が機能しないのか理解できreduce()
ませんgrouped_df
。データ型のクラスが次の場合のソリューションの 1 つとして投稿したTibble データ型の Rowwise summation での議論に基づいて作成しています。reduce()
"tbl_df" "tbl" "data.frame"
サンプルデータは次のとおりです。
df <- data.frame(client = rep(c("Client A","Client B", "Client C"),3),
year = rep(c(2014,2013,2012), each=3),
rev1 = rep(c(10,20,30),3),
rev2 = rep(c(10,20,30),3))
どこclass (df)
ですか"tbl_df" "tbl" "data.frame"
私は今df
クラスに変換しgrouped_df
ます:
df1 <- df %>%
group_by(client, year,rev1) %>%
summarise(rev3 = sum(rev1,rev2)) %>%
select(client, year, rev3, rev1)
ここでclass (df1)
、"grouped_df" "tbl_df" "tbl" "data.frame"
これは予想どおりです。
reduce()
で行単位の合計を行うdf1
と、エラーがスローされます。
df1%>% dplyr::mutate(sum=Reduce("+",.[3:4]))
Error: incompatible size (9), expecting 1 (the group size) or 1
しかし、df1
データフレームに変換するとうまくいきます。
df1%>% dplyr::as_data_frame() %>% dplyr::mutate(sum=Reduce("+",.[3:4]))
上記head()
の出力は次のとおりです。
# A tibble: 6 × 5
client year rev3 rev1 sum
<fctr> <dbl> <dbl> <dbl> <dbl>
1 Client A 2012 20 10 30
2 Client A 2013 20 10 30
3 Client A 2014 20 10 30
4 Client B 2012 40 20 60
5 Client B 2013 40 20 60
6 Client B 2014 40 20 60
...
reduce()
関数がグループ化されたデータでは機能しないのに、グループ化されていないデータでは機能する理由を誰かが説明できますか? 多分、私はここで何かが欠けています。