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"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。