1

rでmelt()関数を使用してデータフレームを形成しようとしています。

オリジナルはこちら、

     group StartX StartY   EndX   EndY id
  18878713 524897 180779 525352 179484  1
  18884056 531199 183111 532538 182503  2

これを形にしたいのですが、

     group Variable  Value id
  18878713   524897 180779  1
  18884056   531199 183111  2
  18878713   525352 179484  1
  18884056   532538 182503  2

どうすればこれを行うことができますか?ありがとう!

4

3 に答える 3

3

を使用した別の基本 R ソリューションを次に示しreshape(...)ます。

result <- reshape(df,idvar=c(1,6),times=c("Start","End"),v.names=c("X","Y"),
                  varying=list(c(2,4),c(3,5)),direction="long")
result
#                    group id  time      X      Y
# 18878713.1.Start 18878713  1 Start 524897 180779
# 18884056.2.Start 18884056  2 Start 531199 183111
# 18878713.1.End   18878713  1   End 525352 179484
# 18884056.2.End   18884056  2   End 532538 182503

timeで列を取り除くことができます

result$time <- NULL 

melt(...)この種の問題用に設計されていない をどうしても使用したい場合は、次の方法があります。

library(reshape2)
m.1 <- melt(df,id=c(1,6),measure=c(2,4),value.name="X")
m.2 <- melt(df,id=c(1,6),measure=c(3,5),value.name="Y")
result <- data.frame(m.1[,-3],Y=m.2$Y)
result
#      group id      X      Y
# 1 18878713  1 524897 180779
# 2 18884056  2 531199 183111
# 3 18878713  1 525352 179484
# 4 18884056  2 532538 182503
于 2014-11-15T19:38:13.360 に答える
0

melt.data.table最近開発版で実装された複数の列を溶かす新機能を使用するとv1.9.5、次のことができます。

require(data.table) ## 1.9.5
melt(dt, measure = patterns("^Start", "^End"))[, variable := NULL][]
#       group id value1 value2
# 1: 18878713  1 524897 180779
# 2: 18884056  2 531199 183111
# 3: 18878713  1 525352 179484
# 4: 18884056  2 532538 182503

これらの手順に従って、開発版をインストールできます。

于 2015-02-28T07:35:42.020 に答える