Mam ogromną ramkę danych. Jedna kolumna to liczba całkowita z zakresu od 1 do 2. Potrzebuję sposobu na znalezienie ciągłych wierszy z pewną liczbą określonych wartości w tej kolumnie, podzielenie tych wierszy i przetworzenie ich później na wykresy.Jak wyszukiwać równe zmienne w wierszach (w inteligentny sposób) i przechowywać zgodnie z wierszami jako podzbiory?
Dołączyłem mały przykład, który wykonuje przynajmniej część pożądanej pracy: Jestem w stanie wydrukować podzestawy, których szukam. Pozostają jednak dwa pytania:
- Domyślam się, że istnieją sposoby mądrzejsze w R, a następnie zastosować pętlę "dla" w pełnym data.frame. Jakieś wskazówki?
- Które polecenie mam umieścić tam, gdzie teraz polecenie "print" zapisuje tymczasowy plik data.frame? Sądzę, że potrzebuję listy ze względu na różną długość podzbiorów ...
Już wcześniej obejrzałem agregat lub ddply, ale nie mogłem znaleźć rozwiązania.
Każda pomoc jest bardzo ceniona.
test<-c(rep(1,3),rep(2,5),rep(1,3),rep(2,3),rep(1,3),rep(2,8),rep(1,3))
letters<-c("a","b","c","d")
a1<-as.data.frame(cbind(test,letters))
BZ<-2 #The variable to look for
n_BZ=4 #The number of minimum appearences
k<-1 # A variable to be used as a list item index in which the subset will be stored
for (i in 2:nrow(a1)){
if (a1$test[i-1]!=BZ & a1$test[i]==BZ) # When "test" BECOMES "2"
{t_temp<-a1[i,]} #... start writing a temporary array
else if (a1$test[i-1]==BZ & a1$test[i]==BZ) # When "test" REMAINS "2"
{t_temp<-rbind(t_temp,a1[i,])} #... continue writing a temporary array
else if (a1$test[i-1]==BZ & a1$test[i]!=BZ) # When "test" ENDS BEING "2"
{if (nrow(t_temp)>n_BZ) #... check if the temporary array has more rows then demanded
{print(t_temp) #... print the array (desired: put the array to a list item k)
k<-k+1}} #... increase k
else # If array too small
{t_temp<-NULL} # reset
}
+1, miłe użycie 'rle()' i 'split()' –
Dzięki, dobre wezwanie do konwersji. –
Dzięki za szybką odpowiedź, spróbuję ... –