2012-12-05 47 views
7

Tôi đang cố định dạng cột dữ liệu thành nhiều cột nhị phân để cuối cùng sử dụng cho khai phá quy tắc kết hợp. Tôi đã có một số thành công bằng cách sử dụng vòng lặp for và ma trận triplet đơn giản, nhưng tôi không chắc chắn cách tổng hợp theo các cấp trong cột đầu tiên sau đó - tương tự như một nhóm theo câu lệnh trong SQL. Tôi đã cung cấp một ví dụ dưới đây, mặc dù với một tập dữ liệu nhỏ hơn nhiều - nếu thành công bộ dữ liệu thực tế của tôi sẽ là 4.200 hàng bởi 3.902 cột vì vậy bất kỳ giải pháp nào cần phải có khả năng mở rộng. Bất kỳ đề xuất hoặc phương pháp tiếp cận thay thế sẽ được đánh giá rất nhiều!Chuyển đổi dữ liệu hàng thành cột nhị phân

> data <- data.frame(a=c('sally','george','andy','sue','sue','sally','george'), b=c('green','yellow','green','yellow','purple','brown','purple')) 
> data 
     a  b 
1 sally green 
2 george yellow 
3 andy green 
4 sue yellow 
5 sue purple 
6 sally brown 
7 george purple 

x <- data[,1] 
for(i in as.numeric(2:ncol(data))) 
x <- cbind(x, simple_triplet_matrix(i=1:nrow(data), j=as.numeric(data[,i]), 
       v = rep(1,nrow(data)), dimnames = list(NULL, levels(data[,i])))) 

##Looks like this: 

> as.matrix(x) 

    name brown green purple yellow 
[1,] "sally" "0" "1" "0"  "0"  
[2,] "george" "0" "0" "0"  "1" 
[3,] "andy" "0" "1" "0"  "0"  
[4,] "sue" "0" "0" "0"  "1" 
[5,] "sue" "0" "0" "1"  "0"  
[6,] "sally" "1" "0" "0"  "0" ##Need to aggregate by Name 

##Would like it to look like this: 
    name brown green purple yellow 
[1,] "sally" "1" "1" "0" "0"  
[2,] "george" "0" "0" "0" "1" 
[3,] "andy" "0" "1" "0" "0"  
[4,] "sue" "0" "0" "1" "1" 
+0

Tại sao bạn muốn tất cả mọi thứ như nhân vật? Liệu 'as.data.frame.matrix (dữ liệu)' có đạt được điều bạn muốn không? – A5C1D2H2I1M1N2O1R2T1

Trả lời

4

này nên làm như lừa:

## Get a contingency table of counts 
X <- with(data, table(a,b)) 

## Massage it into the format you're wanting 
cbind(name = rownames(X), apply(X, 2, as.character)) 
#  name  brown green purple yellow 
# [1,] "andy" "0" "1" "0" "0" 
# [2,] "george" "0" "0" "1" "1" 
# [3,] "sally" "1" "1" "0" "0" 
# [4,] "sue" "0" "0" "1" "1" 
Các vấn đề liên quan