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

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

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

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

Q&A

解決済

1回答

7610閲覧

R でas.data.frameを使うとデータフレームが転置されてしまう

botamochi6277

総合スコア10

R

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

0グッド

0クリップ

投稿2018/05/23 08:56

R で データフレームにapplyをかけて, ggplotように変形させようとしたのですが, オブジェクトの型と形状で問題が発生しました.

やりたいこととしては, あるデータフレームに対してapply()を使ってその結果をggplotでプロットすることになります.
ggplotに入力するオブジェクトdf2はdf1から次のプロセスで得るものとします.

r

1df1 %>% gather(key = variable, value = value) -> df2

最終的に目的のものは得られていますが,対処療法でしかないので, 転置を回避する方法を教えてください.

問題1. apply()を使うと型がデータフレームではなくなる

r

1>head(iris) 2 Sepal.Length Sepal.Width Petal.Length Petal.Width Species 31 5.1 3.5 1.4 0.2 setosa 42 4.9 3.0 1.4 0.2 setosa 53 4.7 3.2 1.3 0.2 setosa 64 4.6 3.1 1.5 0.2 setosa 75 5.0 3.6 1.4 0.2 setosa 86 5.4 3.9 1.7 0.4 setosa 9>apply(iris[,1:4],2,mean) 10Sepal.Length Sepal.Width Petal.Length Petal.Width 11 5.843333 3.057333 3.758000 1.199333 12>class(apply(iris[,1:4],2,mean)) 13[1] "numeric"

といったように, apply()の計算結果がnumaricの型になってしまいます

問題2. as.data.frame() で変形すると転置される

じゃあ, データフレームに変換すればいいじゃないかと, as.data.frame()を使うと, なぜか転置されます.

r

1>as.data.frame(apply(iris[,1:4],2,mean)) 2 apply(iris[, 1:4], 2, mean) 3Sepal.Length 5.843333 4Sepal.Width 3.057333 5Petal.Length 3.758000 6Petal.Width 1.199333

ならば, 再度転置すればいいじゃないか,ということでt()を使うと型が変わります.

r

1>t(as.data.frame(apply(iris[,1:4],2,mean))) 2 Sepal.Length Sepal.Width Petal.Length Petal.Width 3apply(iris[, 1:4], 2, mean) 5.843333 3.057333 3.758 1.199333 4> class(t(as.data.frame(apply(iris[,1:4],2,mean)))) 5[1] "matrix"

ちなみにtranspose()だと名前が変わります.

r

1>transpose(as.data.frame(apply(iris[,1:4],2,mean))) 2 V1 V2 V3 V4 31 5.843333 3.057333 3.758 1.199333

さらに, 転置したものをas.data.frame()で変換すると,今度は転置されずにようやく目的のものが得られます.

r

1> as.data.frame(t(as.data.frame(apply(iris[,1:4],2,mean)))) 2 Sepal.Length Sepal.Width Petal.Length Petal.Width 3apply(iris[, 1:4], 2, mean) 5.843333 3.057333 3.758 1.199333 4> class(as.data.frame(t(as.data.frame(apply(iris[,1:4],2,mean))))) 5[1] "data.frame"

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

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

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

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

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

guest

回答1

0

ベストアンサー

R

1as.data.frame(lapply(iris[,1:4],mean))

投稿2018/05/23 09:51

KojiDoi

総合スコア13671

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問