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

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

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

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

Q&A

解決済

2回答

271閲覧

Rでのデータの並べ替えについて

Azard.

総合スコア16

R

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

0グッド

0クリップ

投稿2019/01/14 18:52

編集2019/01/15 01:06

Rについての質問です。
前にも同じような質問をして回答をいただいたのですが、うまくできなかったので今度は具体的に質問したいと思います。
今、このようなデータを持っています。
Country.Name|Country.Code|Indicator.Name|Indicator.code|X1960|X1961
|:--|:--:|--:|
|amrica|a|oby|oby|69|NA
|canada|b|oby|oby|NA|90
|china|c|oby|oby|77|45

このデータを下のように変えたいです。
|Country.Name|Country.Code|year|poverty_gap|
|:--|:--:|--:|
|america|a|1960|69|
|america|a|1961|NA|
|canada|b|1960|NA|
|canada|b|1961|90|
|china|c|1960|77|
|china|c|1961|45|

ただ、実際のデータはまあまあ量が多く、Country.Nameだけでも200個ほど、また年代を表しているX1960の部分もX1960からX2017まであります。
poverty_gapとして表したい中にNAと表示される欠損値も多くあるため、それらのことも考慮したうえで、エラーなどが出ない方法を教えていただきたいです。
Indicator.NameとIndicator.Codeはあってもなくても構いません。

わかる方よろしくお願いいたします。


実際のデータはこんな感じです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

reshape2 というパッケージをインストールして、こんな感じでどうでしょうか。
持っているデータを mydata というデータフレーム、結果を result としています。

R

1library(reshape2) 2temp <- melt(mydata, id = 1:4, na.rm = FALSE, variable.name = "year", value.name = "poverty_gap") 3temp$year <- substr(temp$year, 2, 5) 4result <- temp[,c(1,2,5,6)]

投稿2019/01/15 11:33

fiwa

総合スコア1192

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

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

Azard.

2019/01/15 15:38

ありがとうございます!! やっとできました!!
guest

0

対象データフレームがtestdfという名前で存在するとして、

R

1for(row in 1:nrow(testdf)){ 2 for(year in "Xなんちゃら"の列の番号が格納されたベクトル){ 3 y <- as.integer(substring(colnames(testdf)[year],2)) 4 print(c(testdf[row, "Country.Name"], testdf[row, "Country.Code"], y, testdf[row, year])) 5 } 6}

まあこんな感じでそれっぽい出力がなされると思います。

投稿2019/01/14 20:06

KojiDoi

総合スコア13671

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

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

Azard.

2019/01/15 01:08

回答ありがとうございます。 Xなんちゃらの列の番号が格納されたベクトルというのは、具体的にはどういう風に入力すればばいいのでしょうか。 上に実際のデータの画像を添付したので、ぜひよろしくお願いします。
KojiDoi

2019/01/15 04:41

colnames()に対してsubstring()してgrep()すればできる。そろそろ自分でコードを書いてみることに挑戦した姿勢を示してみてはどうだろう。
Azard.

2019/01/15 05:14 編集

わからない自分が悪いのは大前提ですが、なんども試してみてできないから質問させていただいているんです。初心者なので専門用語を並べられてもわかりません。もう僕の投稿には反応していただかなくて結構です。あなたの対応の仕方は以前の時から感じていましたが、とてつもなく不快です。もっとわかりやすい方にお答えいただきます。
KojiDoi

2019/01/15 05:19

何度も試してみてと言われても、その中身がわかりようがないのだから、こちらとしては「丸投げ」だなとしか判断のしようがないだろ。ま、後は勝手にしてください。「わかりやすい方」が出てきてくれるといいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問