具体来说,
我使用了以下设置:
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 ##
答案 0 :(得分: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
答案 1 :(得分: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