Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Sortowanie w R

Witam

Chciałem zapytać w jaki sposób można sortować tablice w R. A tak wlasciwie chodzi mi o zawężenie taeli pod jakims katem np. Jeden z szeregów zawiera dane TAK i NIE. chciałbym by program pokazał (zapisał jako osobny obiekt) mi tylko te rekordy z wartością TAK. Ewentualnie jak zawrzeć kilka warunków.

Pozdrawiam

Temat: Sortowanie w R

W R można to wykonać na wiele różnych sposobów. Przykładowo
Filtrowanie:
 > (data <- data.frame(col1=c(1:5, 20:24), col2=c(rep("TAK", 5), rep("NIE", 5)), col3=rep(c("X","Y"), 5)))
col1 col2 col3
1 1 TAK X
2 2 TAK Y
3 3 TAK X
4 4 TAK Y
5 5 TAK X
6 20 NIE Y
7 21 NIE X
8 22 NIE Y
9 23 NIE X
10 24 NIE Y
> data[ data$col2=="TAK" & data$col3=="X", ]
col1 col2 col3
1 1 TAK X
3 3 TAK X
5 5 TAK X
> subset(data, col2=="TAK" & col3=="X")
col1 col2 col3
1 1 TAK X
3 3 TAK X
5 5 TAK X
> library(dplyr)
> data %>% filter(col2=="TAK" & col3=="X") %>% as.data.frame
col1 col2 col3
1 1 TAK X
2 3 TAK X
3 5 TAK X
> library(sqldf)
> sqldf("SELECT * FROM data d WHERE d.col2='TAK' AND d.col3='X'")
col1 col2 col3
1 1 TAK X
2 3 TAK X
3 5 TAK X


Sortowanie:
 > (data <- data.frame(col1=sample(1:10, replace=T), col2=sample(LETTERS, 10, replace=T)))
col1 col2
1 10 O
2 4 A
3 4 J
4 10 Z
5 9 N
6 4 I
7 9 I
8 8 S
9 1 D
10 1 C
> data[ with(data, order(col1, col2)), ]
col1 col2
10 1 C
9 1 D
2 4 A
6 4 I
3 4 J
8 8 S
7 9 I
5 9 N
1 10 O
4 10 Z
> data %>% arrange(col1, col2)
col1 col2
1 1 C
2 1 D
3 4 A
4 4 I
5 4 J
6 8 S
7 9 I
8 9 N
9 10 O
10 10 Z
> sqldf("SELECT * FROM data d ORDER BY d.col1, d.col2")
col1 col2
1 1 C
2 1 D
3 4 A
4 4 I
5 4 J
6 8 S
7 9 I
8 9 N
9 10 O
10 10 Z


...i wiele innych sposobów.Ten post został edytowany przez Autora dnia 29.02.16 o godzinie 08:36
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Sortowanie w R

Pakiet dplyr nie jest dostępny
Warning in install.packages :
package ‘dplyr’ is not available (for R version 3.1.0)

Ale poza tym działa mi dobrze.

Wielkie dziękiTen post został edytowany przez Autora dnia 29.02.16 o godzinie 11:51
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Sortowanie w R

Jeszcze jedno pytanie .

Czytam pomoc ale nie widzę

Co muszę dopisać by mi sortowało w porządku malejącym. Teraz wychodzi mi wszystko w porządku rozstajnym.

Z góry dzięki

-------------------------------------
ok już wiem minus załatwia sprawę choć program nie chciał mi posortować wg liter w porządku malejącym
data[ with(data, order(col1, -col2)), ] 


Chyba, że coś źle robięTen post został edytowany przez Autora dnia 29.02.16 o godzinie 15:40

Temat: Sortowanie w R

Dokumentacje dokładnie mówią, co należy zrobić:

https://stat.ethz.ch/R-manual/R-devel/library/base/html...
[...]decreasing - logical. Should the sort order be increasing or decreasing? For the "radix" method, this can be a vector of length equal to the number of arguments in .... For the other methods, it must be length one.

 > head(   data[ order(data$col1, data$col2, decreasing=T), ]   )
col1 col2
4 10 Z
1 10 O
5 9 N
7 9 I
8 8 S
3 4 J


https://cran.r-project.org/web/packages/dplyr/dplyr.pdf
[...]desc - Descending order.
Description
Transform a vector into a format that will be sorted in descending order


 > head(    data %>% arrange(desc(col1), desc(col2))    )
col1 col2
1 10 Z
2 10 O
3 9 N
4 9 I
5 8 S
6 4 J


http://www.w3schools.com/sql/sql_orderby.asp
[...]To sort the records in a descending order, you can use the DESC keyword.

 > head(   sqldf("SELECT * FROM data d ORDER BY d.col1 DESC, d.col2 DESC")   )
col1 col2
1 10 Z
2 10 O
3 9 N
4 9 I
5 8 S
6 4 J


PS: przed wykonaniem sortowania, gdzieś na początku skryptu trzeba ustawić:
options(stringsAsFactors=FALSE)
Ten post został edytowany przez Autora dnia 29.02.16 o godzinie 15:40
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Sortowanie w R

Dziękuje jeszcze raz. Kombinowałem też z tym minusem i nawet udało mi się coś takiego

newdata <- data[order(col1),]
newdata <- data[order(col2),]
newdata <- data[order(-col1,col2),]
ale
newdata <- data[order(col1,-col2),] już nie działa podobnie jak
newdata <- data[order(-col2),]

jeszcze nad tym posiedzę
Pozdrawiam
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Sortowanie w R

Ostatnie mam nadzieję pytanie z tego tematu

Jedna z moich danych to data zapisana tak 2015-09-30 00:39 tj wraz z godziną dane są z kilku miesięcy

W jaki sposób mogę to posortować/ przefiltrować wg miesięcy (da się coś z tym zrobić?)

Danych mam bardzo dużo więc ręcznie tego nie mam jak zrobić
Paweł Broda

Paweł Broda Software Engineer

Temat: Sortowanie w R

zamień sobie daty na klasę POSIXlt albo użyj czegoś z pakietu lubridate
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Sortowanie w R

2015-09-04 20:28 1
2015-09-04 21:07 0
2015-09-04 23:05 1
2015-09-04 19:11 1
2015-09-03 00:08 4
2015-09-03 00:24 5
2015-09-03 00:06 0
2015-09-03 01:18 0
2015-09-03 01:22 0
2015-09-03 01:08 1
2015-09-03 01:14 1
2015-09-03 01:03 1
2015-09-03 01:20 2
2015-09-03 01:24 0
2015-09-03 00:38 4
2015-09-03 01:26 0
2015-09-03 01:50 0
2015-09-03 02:02 1
2015-09-03 01:40 2
2015-09-03 01:38 3

filtr<-subset(Dane, wynik=="1"& Data.rejestracji=="2015-09-.", )


To nie działa ale o tym wiedziałem, że prawa działać nie ma. Natomiast chciałbym właśnie w takiej formie by to działało.

Próbowałem na kilka sposobów ale nic mi nie che wyjść :/ Może wasze doświadczenie coś pomoże

Myślałem tez by dać warunek Data.rejestracji> "2015-09-04 00:00", i mniejsza niż Data.rejestracji< "2015-09-05 00:00",

Oczywiście to tylko taki psełdo kod - jesteście w stanie mi w tym pomóc?

Pozdrawiam
Z góry wielkie dzięki za pomoc

Temat: Sortowanie w R

Nie stosowałem żadnych dodatków - czysty R, data jako tekst w podanym formacie.

 > options(stringsAsFactors=F)
> x = read.table(file="c:/tmp/x.csv", sep=";", header=T)
> x
Data.rejestracji Wynik
1 2015-09-04 20:28 1
2 2015-09-04 21:07 1
3 2015-09-04 23:05 1
4 2015-09-04 19:11 0
5 2015-09-03 00:08 0
6 2015-09-03 00:24 0
7 2015-09-03 00:06 0
8 2015-09-03 01:18 0
9 2015-09-03 01:22 1
10 2015-09-03 01:08 1
11 2015-09-03 01:14 1
12 2015-09-03 01:03 1
13 2015-09-03 01:20 2
14 2015-09-03 01:24 2
15 2015-09-03 00:38 1
16 2015-09-03 01:26 1
17 2015-09-03 01:50 2
18 2015-09-03 02:02 2
19 2015-09-03 01:40 1
20 2015-09-03 01:38 1

> subset(x, Wynik=="1" & Data.rejestracji > '2015-09-03 01:30')
Data.rejestracji Wynik
1 2015-09-04 20:28 1
2 2015-09-04 21:07 1
3 2015-09-04 23:05 1
19 2015-09-03 01:40 1
20 2015-09-03 01:38 1

> subset(x, Wynik=="1" & Data.rejestracji > '2015-09-03 01:30' & Data.rejestracji < '2015-09-04')
Data.rejestracji Wynik
19 2015-09-03 01:40 1
20 2015-09-03 01:38 1

> subset(x, Wynik=="1" & Data.rejestracji > '2015-09-03 01:30' & Data.rejestracji < '2015-09-04 22:00')
Data.rejestracji Wynik
1 2015-09-04 20:28 1
2 2015-09-04 21:07 1
19 2015-09-03 01:40 1
20 2015-09-03 01:38 1
Ten post został edytowany przez Autora dnia 03.03.16 o godzinie 15:48
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Sortowanie w R

Coś mi nie działa

wyskakuje

Warning messages:
1: In Ops.factor(Data.rejestracji, "2014-12-01 01:30") :
> not meaningful for factors
2: In Ops.factor(Data.rejestracji, "2015-09-04 03:20") :
< not meaningful for factors


Dane wczytuję tak

Dane<-read.csv2("D:/progR/dan.csv")

mam tam 6 kolumn i kilka tysięcy wierszy

Polecenie dałem tak

sort<-subset(Dane, wynik.kontroli=="1" & Rodzaj.kontroli=="celowa" & Data.rejestracji > '2014-12-01 01:30' & Data.rejestracji < '2015-09-04 03:20',)


Coś mam źle? Różnica tylko (chyba) w sposobie wczytywania

to
options(stringsAsFactors=F)
dałem

Może trzeba jakiś pakiet??

Pozdrawiam

Temat: Sortowanie w R

options(stringsAsFactors=F) musi być na początku, przed wszelkimi operacjami wczytywania lub tworzenia danych.

Podobne tematy


Następna dyskusja:

Sortowanie tabeli




Wyślij zaproszenie do