我在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,它将给出相应的值。
它不完全是一个转置,但有点类似。我不知道如何做到这一点。请帮我解决这个问题。
答案 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