2012-02-22 7 views
6

I mają następujące ramki danychrodzaj ramki danych ręcznie przy braku kolumny numerycznej

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")) 

więc niedostatku ramki danych są przekształcane za pomocą ręcznego zamówienie na zmienną X.

np to jest oryginalny

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 

ale to, co chcę, to nowa ramka danych, aby rozpocząć na podstawie wartości X, ale nie alfabetycznie, ale losowo w kolejności, które wybrałem na przykład:

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

jak to zrobić?

dziękuję

+0

Czy twój plik data.frame ma tylko 7 wierszy? Jeśli tak, to dlaczego nie utworzyć go w odpowiedniej kolejności? Alternatywnie, aby zmienić kolejność, użyj 'dd [c (2, 5, 7, itp.)], Gdzie 2, 5, 7 itd. Są numerami wierszy w żądanej kolejności. – jbaums

+1

@jbaums: nie, nie, ale to jest część, a cała reszta to ta sama część dla zmiennej X, ale druga zmienna jest inna. więc chcę zastosować to dla wszystkich ramek danych na podstawie ich wartości X: – ifreak

Odpowiedz

10

Ponieważ kolumna x jest czynnikiem, możesz po prostu upewnić się, że jego poziomy są w żądanej kolejności.

# 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

Nie dostałem sposobu, w jaki mogę przypisać zamówienie, którego chcę? ? – ifreak

+0

Należy podać żądaną kolejność w zmiennej 'desired_order' (bez duplikatów). W tym przykładzie użyłem tylko kolejności losowej, ale możesz ją określić ręcznie, np. 'desired_order <- c (" C1 "," C2 "," N4 "," C4 "," N1 "," N2 "," C3 ")'. –

+0

, ale to będzie działać dla całej ramki danych (w tym klatek danych podrzędnych tego samego typu)? – ifreak

0

Jeśli Twój data.frame naprawdę jest na tyle mały, aby ręcznie zmienić kolejność, a następnie po prostu zrobić wektor liczb 1:7, uporządkowaną w sposób, który powinien pojawić się wiersze. np:

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 

Lub, jeśli naprawdę chcesz to zrobić w postaci wektorowej, można również odwołać się od nazwy wierszy, tak:

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

nie jest tak mała, ale jest jej częścią, a cała reszta to ta sama część dla zmiennej X, ale druga zmienna to inne wartości. więc chcę zastosować to dla wszystkich ramek danych w oparciu o ich wartość X (ale także rozważyć każdy z nich jako małą ramkę danych i zastosować to do niego) – ifreak

Powiązane problemy