0

私は初心者で、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()関数がグループ化されたデータでは機能しないのに、グループ化されていないデータでは機能する理由を誰かが説明できますか? 多分、私はここで何かが欠けています。

4

2 に答える 2

1

replace()上記のどのコード ブロックでも関数を使用していません。機能を使用していReduce()ます。

余談df()ですが、パッケージには密度分布関数がありstatsます。オブジェクトを関数に割り当てるのは悪い習慣です。

于 2017-01-07T07:59:19.830 に答える