如何在R中重新排列或转置数据?

时间:2014-05-13 15:08:10

标签: r reshape

我想更改此数据集

Date    A1  A2  A3  B1  B2  B3
1.4.04  5   1   2   10  13  4
2.4.04  2   2   0   11  12  5
3.4.04  4   4   3   14  15  8

这样的事情

Date    A   B   C
1.4.04  5   10  1
1.4.04  1   13  2
1.4.04  2   4   3
2.4.04  2   11  1
2.4.04  2   12  2
2.4.04  0   5   3
3.4.04  4   14  1
3.4.04  4   15  2
3.4.04  3   8   3

列A1到A3是来自不同站的测量值,我想将它们放在一列中。 B. C列相同的是站数。怎么在R?

以下是data.frame

的可重现示例
mydf <- structure(
  list(Date = structure(1:3, .Label = c("1.4.04", "2.4.04",  "3.4.04"), 
                        class = "factor"), 
       A1 = c(5L, 2L, 4L), A2 = c(1L,  2L, 4L), A3 = c(2L, 0L, 3L), 
       B1 = c(10L, 11L, 14L), B2 = c(13L,  12L, 15L), B3 = c(4L, 5L, 8L)), 
  .Names = c("Date", "A1", "A2",  "A3", "B1", "B2", "B3"), 
  row.names = c(NA, 3L), class = "data.frame")

2 个答案:

答案 0 :(得分:3)

这是一个经典的&#34;宽&#34;到&#34;长&#34; reshape问题(以及您的数据 - 至少是示例数据 - 很容易进行转换):

reshape(mydf, direction = "long", idvar="Date", 
        varying = 2:ncol(mydf), sep = "", timevar="C")
#            Date C A  B
# 1.4.04.1 1.4.04 1 5 10
# 2.4.04.1 2.4.04 1 2 11
# 3.4.04.1 3.4.04 1 4 14
# 1.4.04.2 1.4.04 2 1 13
# 2.4.04.2 2.4.04 2 2 12
# 3.4.04.2 3.4.04 2 4 15
# 1.4.04.3 1.4.04 3 2  4
# 2.4.04.3 2.4.04 3 0  5
# 3.4.04.3 3.4.04 3 3  8

答案 1 :(得分:1)

这有用吗? (用数据集的名称替换&#39;表格)

m1<-as.matrix(t(table[2:4]))
A<-as.vector(m1)
m2<-as.matrix(t(table[5:7]))
B<-as.vector(m2)

Date<-sort(rep(table$Date,3))
C<-rep(1:3,dim(table)[1])

output<-data.frame(Date,A,B,C)

如果没有,请提供可重复的示例。