如何在R中转置数据

时间:2015-11-24 14:53:21

标签: r

我使用RNCEP后台来获取temp的重新分析数据。我的数据看起来像这样:

(DD1 <- array(1:12, dim = c(2, 3, 2), 
              dimnames = list(c("A", "B"), 
                              c("a", "b", "c"), 
                              c("First", "Second"))))
# , , First
# 
#   a b c
# A 1 3 5
# B 2 4 6
# 
# , , Second
# 
#   a  b  c
# A 7  9 11
# B 8 10 12  

str(DD1)
#  int [1:2, 1:3, 1:2] 1 2 3 4 5 6 7 8 9 10 ...
#  - attr(*, "dimnames")=List of 3
#   ..$ : chr [1:2] "A" "B"
#   ..$ : chr [1:3] "a" "b" "c"
#   ..$ : chr [1:2] "First" "Second"

我认为这是一个表格数据?

我需要将数据写为csv文件,其中包含以下内容:

y  a  a  b  b  c  c
x  A  B  A  B  A  B
   1  2  3  4  5  6
   7  8  9 10 11 12 

但是当我使用write.csv时,我得到了这个:

write.csv(DD1)
# "","a.First","b.First","c.First","a.Second","b.Second","c.Second"
# "A",1,3,5,7,9,11
# "B",2,4,6,8,10,12 

我以为我必须首先转置数据。所以我用过这个:

DD2 <- as.data.frame.table(DD1)

我也使用了t(),但也没有用。

2 个答案:

答案 0 :(得分:2)

R中的转置函数是t(),所以希望这对你试图转置的数据帧起作用。

DD3= t(DD2)

答案 1 :(得分:1)

您与as.data.frame.table(DD1)走在了正确的轨道上。这将为您提供一个“长”数据集,然后可以将其转换为可以使用write.csv的“宽”表单。

但请注意,R只允许一行标题,因此您必须将显示为“x”和“y”的内容组合成一个标题行。

这是我建议的方法:

library(data.table)
(DD2 <- dcast(data.table(as.data.frame.table(DD1)), 
              Var3 ~ Var1 + Var2, value.var = "Freq"))
#      Var3 A_a A_b A_c B_a B_b B_c
# 1:  First   1   3   5   2   4   6
# 2: Second   7   9  11   8  10  12

然后,您可以在“DD2”对象上轻松使用write.csv