0

我有一个长格式的数据框,比如这个:

longData <- mtcars[1:5, 1:4]
library(reshape2)
melt(longData)

Using  as id variables
   variable value
1       mpg  21.0
2       mpg  21.0
3       mpg  22.8
4       mpg  21.4
5       mpg  18.7
6       cyl   6.0
7       cyl   6.0
8       cyl   4.0
9       cyl   6.0
10      cyl   8.0
11     disp 160.0
12     disp 160.0
13     disp 108.0
14     disp 258.0
15     disp 360.0
16       hp 110.0
17       hp 110.0
18       hp  93.0
19       hp 110.0
20       hp 175.0

是否有可能创建一个函数来吐出 R 代码,该代码将以宽格式构建相同的数据帧?注意:我不想将 longData 转换为宽格式,我想以编程方式输出将数据帧转换为宽格式的 R 代码,如下所示:

someFunctionToOutputWideCode()

data.frame(mpg = c(21.0, 21.0, 22.8, 21.4, 18.7),
           cyl = c(6, 6, 4, 6, 8),
           disp = c(160, 160, 108, 258, 360),
           hp = c(110, 110, 93, 110, 175))
4

1 回答 1

3

我不认为这就是人们谈论长宽格式时的意思,但是如何实现您想要的呢?

dput(as.data.frame(t(longData)))
# structure(list(`Mazda RX4` = c(21, 6, 160, 110), `Mazda RX4 Wag` = c(21, 
# 6, 160, 110), `Datsun 710` = c(22.8, 4, 108, 93), `Hornet 4 Drive` = c(21.4, 
# 6, 258, 110), `Hornet Sportabout` = c(18.7, 8, 360, 175)), .Names = c("Mazda RX4", 
# "Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive", "Hornet Sportabout"
# ), row.names = c("mpg", "cyl", "disp", "hp"), class = "data.frame")

dput重新 OP 编辑​​:相同的想法 - 将其转换为您喜欢的任何格式,然后

dput(dcast(melt(longData), 1:5 ~ variable))
# structure(list(`1:5` = 1:5, mpg = c(21, 21, 22.8, 21.4, 18.7), 
#     cyl = c(6, 6, 4, 6, 8), disp = c(160, 160, 108, 258, 360), 
#     hp = c(110, 110, 93, 110, 175)), .Names = c("1:5", "mpg", 
# "cyl", "disp", "hp"), row.names = c(NA, -5L), class = "data.frame")
于 2013-05-17T19:29:09.917 回答