6

だから私はこのようなR出力を持っています

Time    50  100  150  200  250  300  350
Carla  1.2  1.8  2.2  2.3  3.0  2.5  1.8
Mace   1.5  1.1  1.9  2.0  3.6  3.0  2.5
Lea    1.7  1.6  2.3  2.7  2.6  2.2  2.6
Karen  1.3  1.7  1.9  2.2  3.2  1.5  1.9

こんな感じにしたい

Time  Score   Name
50    1.2     Carla
50    1.5     Mace
50    1.7     Lea
50    1.3     Karen
100   1.8     Carla
100   1.5     Mace
100   1.7     Lea
100   1.3     Karen

どうすればこれに変換できますか?ありがとうございました

4

2 に答える 2

9

外部パッケージを必要としない 2 つの方法:

# get the data, the number labelled columns get automatically renamed
# to say 'X50' instead of '50'
test <- read.table(text="Time   50   100    150  200 250 300 350
Carla  1.2   1.8   2.2  2.3 3.0 2.5 1.8
Mace   1.5   1.1   1.9  2.0 3.6 3.0 2.5
Lea    1.7   1.6   2.3  2.7 2.6 2.2 2.6
Karen  1.3   1.7   1.9  2.2 3.2 1.5 1.9",header=TRUE)

方法 1 :as.data.frame.table

rownames(test) <- test$Time
result <- setNames(as.data.frame.table(as.matrix(test[-1])),c("Name","Time","Score"))
result$Time <- gsub("X","",result$Time)

> head(result)
   Name Time Score
1 Carla   50   1.2
2  Mace   50   1.5
3   Lea   50   1.7
4 Karen   50   1.3
5 Carla  100   1.8
6  Mace  100   1.1

方法 2 : ベース Rreshape

result <- reshape(test, idvar="Time", varying=-1, direction="long", sep="")
names(result) <- c("Name","Time","Score")

> head(result)
           Name Time Score
Carla.50  Carla   50   1.2
Mace.50    Mace   50   1.5
Lea.50      Lea   50   1.7
Karen.50  Karen   50   1.3
Carla.100 Carla  100   1.8
Mace.100   Mace  100   1.1
于 2013-07-05T05:08:02.093 に答える