Mam ramkę danych zawierającą 10k wierszy, dla danej kolumny X Mam zduplikowane wartości, Jak możemy zrobić, aby wybrać losowo TYLKO JEDEN WIERSZ zawierający tę wartość w tej kolumnie?Losowo wybierać w ramce danych, dla unikalnych wierszy
5
A
Odpowiedz
6
Twoje pytanie nie jest całkiem jasne, ale zakładam, że chcesz posortować całą ramkę danych, zachowując jeden (losowo wybrany) wiersz na "zduplikowaną klasę". Coś jak
library(plyr)
subsampled_data <- ddply(mydata,.(X),
function(x) {
x[sample(nrow(x),size=1),]
})
powinien działać (nie testowane!)
6
Moim pierwszym odruchem byłoby coś eleganckie rozwiązanie Bena ddply
. Jednak wiedząc, że masz tak duży zestaw danych, istnieją zdecydowanie szybsze sposoby. Tutaj jest jeden, który będzie wielokrotnie szybciej, jeśli masz wiele unikalnych wartości:
RemoveDups <- function(df, column) {
inds = sample(1:nrow(df))
df = df[inds, ]
dups = duplicated(df[, column])
df = df[!dups, ]
inds = inds[!dups]
df[sort(inds, index=T)$ix, ]
}
symulować niektóre dane (tutaj z wielu unikalnych wartości):
n.row = 10^6
n.col = 3
set.seed(12345)
data = data.frame(matrix(sample(1000, n.row*n.col, replace=T), nrow=n.row))
Porównaj 2 metody:
> system.time(ddply(data, 'X1', function(x) x[sample(nrow(x), size=1), ]))
user system elapsed
3.264 0.921 4.315
> system.time(RemoveDups(data, 'X1'))
user system elapsed
0.375 0.025 0.399
+0
Elegancki! Wspaniale, dzięki John – Rad
Powiązane problemy
- 1. Losowy wybór wierszy w ramce danych Pandy
- 2. losowo wybierać z 4 tabel
- 3. Wybieranie wierszy w wielowierszowej ramce danych
- 4. Zliczanie unikalnych/różne wartości przez grupę w ramce danych
- 5. Losowe próbkowanie procentowej liczby wierszy w ramce danych
- 6. Fill w ramce danych z wierszy z wartościami powyżej
- 7. Replikowanie wierszy w ramce danych pandy według wartości kolumny
- 8. Jak wybierać wiele wierszy naraz w niestandardowej siatce danych w Windows Mobile 6.0?
- 9. MySQL: Jak zaktualizować 50% wierszy, losowo wybranych?
- 10. Zamień ciąg w ramce danych
- 11. Upuszczanie kolumn w ramce danych
- 12. kolumny Data w ramce danych
- 13. Radzenie wielu list w ramce danych
- 14. Convert Lista wektorów w ramce danych liczy
- 15. Identyfikowanie duplikatów kolumn w ramce danych R
- 16. Wyszukiwanie kolejnych segmentów w ramce danych pandy
- 17. Jak przypisać wartości losowo między ramkami danych
- 18. kolumny specyficzne dla wypełnienia do przodu w ramce danych pandy
- 19. usunąć interpunkcję dla każdego wiersza w ramce danych pandy
- 20. ANOVA dla grup w ramce danych za pomocą scipy
- 21. Dopasowywanie wierszy w jednej ramce danych Pandy do innej opartej na trzech kolumnach
- 22. Wykrywanie zdarzeń w ramce danych pandy
- 23. Jak uzyskać losowo rekordy z bazy danych Oracle?
- 24. Jak usunąć nagłówek w ramce danych?
- 25. Wypełnianie wartości w ramce danych w R?
- 26. Usuń wiersze w ramce danych ze współczynnikiem ""
- 27. Indeks dostępu ostatniego elementu w ramce danych
- 28. Wektoryzowane przeglądanie wartości w ramce danych Pandy
- 29. Dodaj dni do dat w ramce danych
- 30. Aby wyodrębnić wartości inne niż nan z wielu wierszy w ramce danych o pandach
Ta interpretacja pytania OP (zagadkowego) wydaje się bardziej prawdopodobna niż moja, dla której zamierzałem zasugerować 'df [sample (which (df $ X == myVal), 1),]'. – joran
Dzięki chłopaki, próbuję sugestii Bena, Joran, jak to zrobić, jeśli chcę zastosować to do całej wartości colum, ponieważ myVal zgodnie z sugestiami zawartymi w twoich fragmentach zmienia się wzdłuż mojej kolumny X, co oznacza, że mam na przykład setki 5 i setki 8s etc etc – Rad
@Rad Ben's rozwiązanie to obsłuży; moje nie. Zinterpretowaliśmy twoje pytanie inaczej. – joran