2012-02-22 20 views
6

tôi có khung dữ liệu sauloại một khung dữ liệu bằng tay sử dụng không cột số

dd <- data.frame(b = c("High", "Medium", "Highest", "Low", "Not bad","Good", "V. Good"), 
    x = c("C3", "C1", "C4", "N2", "C2", "N1","N4"), x = c("5", "2", "3", "6", "7", "5","7")) 

vì vậy tôi muốn các khung dữ liệu được chuyển đổi bằng cách sử dụng để hướng dẫn cho các X. biến

ví dụ: đó là bản gốc một

1 High C3 5 
2 Medium C1 2 
3 Highest C4 3 
4  Low N2 6 
5 Not bad C2 7 
6 Good N1 5 
7 V. Good N4 7 

nhưng những gì tôi muốn là một khung dữ liệu mới để bắt đầu dựa trên giá trị của X nhưng không theo thứ tự abc, nhưng một cách ngẫu nhiên trong một trật tự mà tôi đã chọn ví dụ:

the first row has x=C1, the second have x=C2, the third have x=N4, ...etc 

cách thực hiện việc này?

cảm ơn bạn

+0

Dữ liệu của bạn có thực sự chỉ có 7 hàng không? Nếu vậy, tại sao không chỉ tạo ra nó theo đúng thứ tự ở nơi đầu tiên? Ngoài ra, để sắp xếp lại, sử dụng 'dd [c (2, 5, 7, vv),]', trong đó 2, 5, 7, v.v., là các số hàng theo thứ tự mà bạn muốn. – jbaums

+1

@ jbaums: không có nó không, nhưng đó là một phần của nó và tất cả phần còn lại là cùng một phần cho biến X nhưng biến khác là khác nhau. vì vậy tôi muốn áp dụng điều này cho tất cả khung dữ liệu dựa trên giá trị X của chúng – ifreak

Trả lời

10

Kể từ cột x là một yếu tố, bạn chỉ có thể đảm bảo rằng các cấp của nó theo thứ tự bạn muốn.

# New sorting order 
desired_order <- sample(levels(dd$x)) 
# Re-order the levels 
dd$x <- factor(as.character(dd$x), levels=desired_order) 
# Re-order the data.frame 
dd <- dd[order(dd$x),] 
+0

tôi không hiểu cách tôi có thể gán thứ tự tôi muốn? ? – ifreak

+0

Bạn nên chỉ định thứ tự mong muốn trong biến 'wish_order' (không trùng lặp). Trong ví dụ này, tôi chỉ sử dụng một thứ tự ngẫu nhiên, nhưng bạn có thể chỉ định nó theo cách thủ công, ví dụ: 'mong muốn <- c (" C1 "," C2 "," N4 "," C4 "," N1 "," N2 "," C3 ")'. –

+0

nhưng điều này sẽ làm việc cho toàn bộ khung dữ liệu (bao gồm cả khung dữ liệu phụ cùng kiểu) ?? – ifreak

0

Nếu bạn data.frame thực sự là đủ nhỏ để tự sắp xếp lại, sau đó chỉ cần tạo ra một vector của các con số 1:7, sắp xếp theo cách mà các hàng sẽ xuất hiện. ví dụ:

dd[c(2,5,7,1,4,3,6),] 

    b x x.1 
    2 Medium C1 2 
    5 Not bad C2 7 
    7 V. Good N4 7 
    1 High C3 5 
    4  Low N2 6 
    3 Highest C4 3 
    6 Good N1 5 

Hoặc, nếu bạn thực sự muốn làm điều đó với một vector nhân vật, bạn cũng có thể tham khảo bằng tên hàng, như thế này:

rownames(dd) <- as.character(dd$x) 
    dd[c("C1","C2","N4","C3","N2","C4","N1"),] 

    b x x.1 
    C1 Medium C1 2 
    C2 Not bad C2 7 
    N4 V. Good N4 7 
    C3 High C3 5 
    N2  Low N2 6 
    C4 Highest C4 3 
    N1 Good N1 5 
+0

nó không nhỏ, nhưng đó là một phần của nó và tất cả phần còn lại là cùng một phần cho Biến X nhưng biến khác là các giá trị khác nhau. vì vậy tôi muốn áp dụng điều này cho tất cả các khung dữ liệu dựa trên giá trị X của họ (nhưng tôi cũng sẽ xem xét từng khung như một khung dữ liệu nhỏ và áp dụng thứ tự này) – ifreak

Các vấn đề liên quan