重塑R(... ala SAS PROC Transpose)

时间:2012-08-09 14:05:52

标签: r

我在R中有下表。我想转置它。我是R的新手并且一直在使用SAS。

所以我想要一个proc transpose的副本是SAS。我也以我想要的格式提供输出。

C_number<-c(1:20)
REG<-letters[1:20]
Market<-c(21:40)
DF<-data.frame(C_number,REG,Market)
n <- nrow(DF)
DF$A_count <- sample(100, n, replace=TRUE) 
DF$B_count <- sample(100, n, replace=TRUE) 

OUTPUT应为:

C_number          REG       Market      Name of former variable          Mem_count1
1                  A        21          A_count                           5
1                  A        21          B_count                           80
2                  B        22          A_count                           36
2                  B        22          B_count                           56
3                  C        23          A_count                           77
3                  C        23          B_count                           26

因此,转置背后的基本思想是转换两列A_count&amp; B_count为一个名为“前变量的名称”并创建一个新的列mem_count1,它将给出相应的值。

它不完全是一个转置,但有点类似。我不知道如何做到这一点。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:6)

您可以使用reshape2(或reshape包),特别是melt功能。 使用像你这样的数据集(因为不同的随机种子而不同)我们可以这样:

require(reshape2)
DF_result <- melt(DF,  measure.vars = c("A_count", "B_count"))
head(DF_result)


##   C_number REG Market variable value
## 1        1   a     21  A_count    49
## 2        2   b     22  A_count    99
## 3        3   c     23  A_count    19
## 4        4   d     24  A_count    43
## 5        5   e     25  A_count    53
## 6        6   f     26  A_count    50

答案 1 :(得分:0)

这将使用基函数reshape

reshape(DF,
        direction="long",
        idvar=1:3, varying=c("A_count","B_count"), # the constant and varying columns
        times=c("A_count","B_count"),     # sets the values for new 'source' column
        v.names="Name_of_former_variable" ) # the header for the 'source' column

                C_number REG Market    time Counts
1.a.21.A_count         1   a     21 A_count     14
2.b.22.A_count         2   b     22 A_count     18
3.c.23.A_count         3   c     23 A_count     49
4.d.24.A_count         4   d     24 A_count     64
5.e.25.A_count         5   e     25 A_count     99
6.f.26.A_count         6   f     26 A_count     10
7.g.27.A_count         7   g     27 A_count     70
8.h.28.A_count         8   h     28 A_count      1
snipped output