質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

817閲覧

【R】tidyverseでカテゴリごとの演算をしたい

toufya

総合スコア15

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2021/10/15 04:24

前提

以下のようなデータフレームを想定します。

> data.frame(Year = rep(2001:2020,2), + Country = c(rep("Russia",10),rep("Soviet",10)), + Category = rep(c("A","B"),10), + Value = as.integer(rnorm(20, mean = 10, sd = 5))) Year Country Category Value 1 2011 Russia A 11 2 2012 Russia B 19 3 2013 Russia A 11 4 2014 Russia B 6 5 2015 Russia A 12 6 2016 Russia B 6 7 2017 Russia A 10 8 2018 Russia B 13 9 2019 Russia A 5 10 2020 Russia B 18 11 2011 Soviet A 21 12 2012 Soviet B 10 13 2013 Soviet A 3 14 2014 Soviet B 23 15 2015 Soviet A 18 16 2016 Soviet B 13 17 2017 Soviet A 10 18 2018 Soviet B 10 19 2019 Soviet A 10 20 2020 Soviet B 5

実現したいこと

Country列の"Russia"と"Soviet"は同じものとして、Value列の値を足し合わせたいです
ただし、Category列の"A"と"B"について分けたいので、イメージする結果は以下の通りです。

Year Country Category Value 1 2011 Russia+Soviet A 6 2 2012 Russia+Soviet B 11 3 2013 Russia+Soviet A 17 4 2014 Russia+Soviet B 22 5 2015 Russia+Soviet A 24 6 2016 Russia+Soviet B 22 7 2017 Russia+Soviet A 28 8 2018 Russia+Soviet B 35 9 2019 Russia+Soviet A 19 10 2020 Russia+Soviet B 34

これをtidyverseパッケージ群のいずれかを利用して行いたいのですが何か方法はあるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Valueの計算がどうして質問の様のような結果になるのか謎なんですが、気にしないことにして。

当該のデータフレームdfについて、

df$Country2 <- ifelse(df$Country=="Russia", "Russia+Soviet", ifelse(df$Country=="Soviet", "Russia+Soviet", df$Country))

として新しい「国カテゴリー」を作り、CountryのかわりにCountry2を使って処理を進めればいいのでは。

投稿2021/10/15 04:57

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toufya

2021/10/15 06:05 編集

すみません。コピペミスでした。 dplyrを使ったやり方では以下の通りにできました。もっと良い方法はあると思いますが。 ``` df %>% pivot_wider(names_from = Country, values_from = Value) %>% mutate(Russia_and_Soviet = Russia + Soviet) %>% pivot_longer(Russia_and_Soviet, names_to = "Country", values_to = "Value") ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問