2012-04-26 21 views
6

Giả sử tôi có một tan data.frame trông như thế này:Làm vững chắc khung dữ liệu bị tan chảy?

variable  value 
1   A -0.19933093 
2   A -1.19043346 
3   A -1.32248172 
4   A -1.98644507 
5   A -0.07930953 
6   B -0.10074686 
7   B 0.72451483 
8   B -0.40914044 
9   B 0.02913376 
10  B 0.16062491 

Làm thế nào để có được nó để:

A  B 
-0.19933093 -0.10074686 
-1.19043346 0.72451483 
-1.32248172 -0.40914044 
-1.98644507 0.02913376 
-0.07930953 0.16062491 

vẻ tầm thường nhưng tôi tẩy trống trên một câu trả lời. dcastacast dường như không làm điều đó. Mục tiêu của tôi là làm điều này trên các tập dữ liệu lớn hơn và biến sản phẩm cuối thành một tên matrix với tên cột là tên biến. Tôi đã thử chơi với daplylaply (trước khi tan chảy) mà không có nhiều may mắn.

Trả lời

8

Hãy thử unstack:

dat <- read.table(text = "variable  value 
1   A -0.19933093 
2   A -1.19043346 
3   A -1.32248172 
4   A -1.98644507 
5   A -0.07930953 
6   B -0.10074686 
7   B 0.72451483 
8   B -0.40914044 
9   B 0.02913376 
10  B 0.16062491",sep = "",header = TRUE) 

> unstack(dat,value~variable) 

      A   B 
1 -0.19933093 -0.10074686 
2 -1.19043346 0.72451483 
3 -1.32248172 -0.40914044 
4 -1.98644507 0.02913376 
5 -0.07930953 0.16062491 

Nhưng tôi nên thêm rằng tôi rất thích biết làm thế nào để làm điều này bằng dcast, như tôi cũng đã cố gắng liên tục và đã không thể đến.

+0

Tôi không nghĩ rằng có thể với 'dcast' mà không thêm cột khác vì cột' biến' không nhận dạng duy nhất từng điểm dữ liệu. Đặt lỏng lẻo hơn, nó không biết hàng nào để đưa các giá trị vào. – Aaron

2

Sử dụng acast() để trả về ma trận. Nó cần một biến id.

library(reshape2) 
dat <- read.table(text = "variable  value 
1   A -0.19933093 
2   A -1.19043346 
3   A -1.32248172 
4   A -1.98644507 
5   A -0.07930953 
6   B -0.10074686 
7   B 0.72451483 
8   B -0.40914044 
9   B 0.02913376 
10  B 0.16062491",sep = "",header = TRUE) 

dat$id = rep(1:5, 2) 
dat 

acast(dat, id~variable) 
+0

Id thậm chí còn dễ dàng hơn để thêm vào trước khi tan chảy, nếu có thể. (Có vẻ như trong tình huống OP, như đã đề cập ở trên.) – Aaron

3

Được rồi, bắt đầu với khung dữ liệu ở dạng rộng, chứa id. melt() để cung cấp biểu mẫu dài, sau đó dcast() để quay lại khung dữ liệu ban đầu.

library(reshape2) 
df = read.table(text = "id A B 
1 1 -0.19933093 -0.10074686 
2 2 -1.19043346 0.72451483 
3 3 -1.32248172 -0.40914044 
4 4 -1.98644507 0.02913376 
5 5 -0.07930953 0.16062491", sep = "", header = TRUE) 

df 

df.melt = melt(df, "id") 
df.melt 

df.original = dcast(df.melt, id~variable) 

df.original 
Các vấn đề liên quan