0

具体来说,

我使用了以下设置:

newdata <- tapply(mydata(#), list(mydata(X), mydata(Y)), sum)

我目前有一张表,目前列出如下:

X= 州,Y= 州内县,#= 某事物的数字总数

  • __ Y1 Y2 Y3 Yn
  • X1 ## ## ## ##
  • X2 ## ## ## ##
  • X3 ## ## ## ##
  • Xn ## ## ## ##

我需要的是一张如下表:

  • X1 Y1 ##
  • X1 Y2 ##
  • X1 Y3 ##
  • X1 Yn ##
  • X2 Y1 ##
  • X2 Y2 ##
  • X2 Y3 ##
  • X2 Yn ##
  • Xn Y1 ##
  • Xn Y2 ##
  • Xn Y3 ##
  • Xn Yn ##
4

2 回答 2

4
library(reshape2)
new_data <- melt(old_data, id.vars=1)

查看?melt有关语法的更多详细信息。

例子:

> df <- data.frame(x=1:5, y1=rnorm(5), y2=rnorm(5))
> df
  x         y1         y2
1 1 -1.3417817 -1.1777317
2 2 -0.4014688  1.4653270
3 3  0.4050132  1.5547598
4 4  0.1622901 -1.2976084
5 5 -0.7207541 -0.1203277
> melt(df, id.vars=1)
   x variable      value
1  1       y1 -1.3417817
2  2       y1 -0.4014688
3  3       y1  0.4050132
4  4       y1  0.1622901
5  5       y1 -0.7207541
6  1       y2 -1.1777317
7  2       y2  1.4653270
8  3       y2  1.5547598
9  4       y2 -1.2976084
10 5       y2 -0.1203277
于 2012-06-06T23:00:47.567 回答
1

一些示例数据

mydata <- data.frame(num=rnorm(40),
                     gp1=rep(LETTERS[1:2],2),
                     gp2=rep(letters[1:2],each=2))

并适用tapply于它:

tmp <- tapply(mydata$num, list(mydata$gp1, mydata$gp2), sum)

的结果tapply是一个矩阵,但您可以将其视为一个表格并使用as.data.frame.table它来转换它。这不依赖于任何额外的包。

as.data.frame.table(tmp)

两种不同的数据结构如下所示:

> tmp
         a         b
A 8.381483  6.373657
B 2.379303 -1.189488
> as.data.frame.table(tmp)
  Var1 Var2      Freq
1    A    a  8.381483
2    B    a  2.379303
3    A    b  6.373657
4    B    b -1.189488
于 2012-06-07T00:23:52.590 回答