www.lefty.fora.pl Forum Index

 R

View previous topic :: View next topic
Post new topic   Reply to topic
Author Message
Admin
Administrator



Joined: 22 Jun 2009
Posts: 27
Read: 0 topics

Warns: 0/5

PostPosted: Sun 16:33, 03 Dec 2017    Post subject: R

[link widoczny dla zalogowanych]

LICZBY PIERWSZE

rm(list=ls()) //usuniecie calej pamieci wszystkich zmiennych itd.
piersi = function(x) {
if (x==2) {return("DAAA")}
else {
if (x%%2==0) {return("NIE XD")}
else {
for (i in 2: (x/2)) {
if (x%%i==0) {return("NIE XP")}
else {i=i+1}
}
}
return("TAK NOO")
}
}
piersi(2)
piersi(3)
piersi(5)

POCHODNA FUNKCJI W PUNKCIE

f1 = function(x){sin(x)*(2.71828^x)}


pochodna = function(f, x, h)
{
wynik = (f(x + h) - f(x - h)) / (2 * h)
return(wynik)
}

pochodna(f1, 2.2, 10^-5)

d2f = function(f, x, h){
result <- (f(x+h)-2*f(x)+f(x-h))/(h^2)
return(result)
}

d2f(f1, 2.2, 10^-5)

ZIARNO LOSOWANIA, GENEROWANIE TABLIC LICZB PSEUDOLOSOWYCH, ŚREDNIA, MINIMUM, ODCHYLENIE, MAKSIMUM

set.seed(68214)
x1<-(rnorm(10^6, mean = 2, sd = 1))
#x1

x2<-(rnorm(10^3, mean = 3, sd = 1))
#x2

y <- x1+x2
y
min(y)
max(y)
mean(y)
sd(y)

HISTOGRAM, RYSOWANIE LINII NA WYKRESIE

hist(y, col="yellow", main="histooo", xlab="a")
abline(h=mean(y, na.rm= TRUE), col="black")
abline(h=min(y, na.rm= TRUE), col="black")
abline(h=max(y, na.rm= TRUE), col="red")
abline(h=sd(y, na.rm= TRUE), col="green")

TABLICE, ZAOKRĄGLANIE, PĘTLA

x <- (rnorm(144, mean = 0, sd = 1))
x
x<- round(x,3)
x
B<-matrix(x, nrow=12, ncol=12, byrow=TRUE)
B
for (i in 1:12) {
for (j in 1:12){
if(i==j){B[i,j] = B[i,j]+10}
if(i==j+3){B[i,j] = 100}
if(i==j-3){B[i,j] = -100}
}
}
B
B <- B*8
B

IMPORTOWANIE DANYCH, WYKRES ROZRZUTU, RYSOWANIE LINII

library(ISLR)
attach(Wage)
head(Wage)
dane <- Wage
dane
head(dane)
summary(dane)
plot(Wage$wage, col="pink", xlab="iksy", ylab="igreki", main = "rozrzut", pch=20, xlim=c(-100, 3100), ylim=c(-10,500))
abline(h=mean(dane$wage), col="purple", lty=3, lwd=3)
abline(h=mean(dane$wage)+3*sd(dane$wage), col="red", lty=1, lwd=3)
abline(h=mean(dane$wage)-3*sd(dane$wage), col="red", lty=1, lwd=3)

KLASA OBIEKTU, ZMIENNE BINARNE, LISTA LICZB

wage
mean(wage)
wage.binarna <- rep(0, 3000)
wage.binarna

for(i in 1:3000)
{
if (wage[i] < 111.7036) {wage.binarna[i] <- 1}
else {wage.binarna[i] <- 0}
}
wage.binarna
wage.binarna <- factor(wage.binarna)
class(wage.binarna)
table(wage.binarna)
head(dane)
dane$wage.binarna <- wage.binarna
head(dane)

USUWANIE KOLUMN Z DANYCH

dane<-dane[-c(11,12)]

ZBIÓR TESTOWY I UCZĄCY SIĘ/ TRENINGOWY


set.seed(68214)
train <- sample(1:nrow(dane), nrow(dane)*0.7)
test <- dane[-train,]
train <- dane[train,]

DRZEWA KLASYFIKACJI, LASY LOSOWE, DUŻE DRZEWA, MACIERZE, TROCHE RZECZY KTORYCH NIE ROZUMIEM, ROCR, PROGNOZY

install.packages("rpart")
library(rpart)
install.packages("rpart.plot")
library(rpart.plot)
set.seed(68214)
drzewo.norm <- rpart(wage.binarna ~ ., data = train, method="class")
plot(drzewo.norm, margin = 0.1)
text(drzewo.norm, pretty = 0)
rpart.plot(drzewo.norm)

#jesli zmienna edukacja ma inne wartosci niz college grad lub advanced grad to zarobki nizsze od sredniej (wage.binarna=1)
#w przeciwnym wypadku i jesli zmienna maritl ma wartosc married lub separated to zarobki wyzsze od sredniej(wage.binarna=0)

#.5.
set.seed(68214)
drzewo.pom <- rpart(wage.binarna ~., data = train, minsplit = 2, cp=0.001)
drzewo.pom
plot(drzewo.pom, margin = 0.1)
printcp(drzewo.pom)
plotcp(drzewo.pom)
min.error <- which.min(drzewo.pom$cptable[, "xerror"])
points(min.error, drzewo.pom$cptable[min.error, "xerror"], col = "green", pch = 20)
optimal.cp <- drzewo.pom$cptable[min.error, "CP"]
optimal.cp
drzewo.opt <- prune(drzewo.pom, cp = optimal.cp)
plot(drzewo.opt, margin = 0.05)
text(drzewo.opt, pretty = 0)
#plot(drzewo.norm, margin = 0.1)
#tak, rozni sie od drzewa.norm

#.6.
set.seed(68214)
install.packages("randomForest")
library(randomForest)
las <- randomForest(wage.binarna ~., data = train, ntree = 150)
las
varImpPlot(las, bg = 2, main = "wzgl. spadek w. Giniego po uwzgl. zmiennej")
#wzgledna waznosc zmiennych pokazuje, ktore zmienne maja duza, a ktore mala moc predykcyjna
#education i age- bardzo duża moc, sex i region- bardzo mała, zerowa

#.7.

wage.binarna.test <- test$wage.binarna # rzeczywiste wart. wage.bin w zbiorze testowym
wage.binarna.test
wage.binarna.prediction <- predict(drzewo.norm, test, type = "class")
wage.binarna.prediction
conf.matrix.drzewo.norm <- table(wage.binarna.test, wage.binarna.prediction)
conf.matrix.drzewo.norm
wage.binarna.prediction2 <- predict(drzewo.opt, test, type = "class")
conf.matrix.drzewo.opt <- table(wage.binarna.test, wage.binarna.prediction2)
conf.matrix.drzewo.opt
wage.binarna.prediction3 <- predict(las, test, type = "class")
conf.matrix.las <- table(wage.binarna.test, wage.binarna.prediction3)
conf.matrix.las
macierz.klasyfikacji <- list(a= conf.matrix.drzewo.norm,b= conf.matrix.drzewo.opt,c= conf.matrix.las)
lapply(macierz.klasyfikacji, function(x) {(x[1,1]+x[2,2])/(x[1,1]+x[2,2]+x[2,1]+x[1,2])})
Accuracy <- lapply(macierz.klasyfikacji, function(x) {(x[1,1]+x[2,2])/(x[1,1]+x[2,2]+x[2,1]+x[1,2])})
Accuracy
class(Accuracy)
names(Accuracy) <- c("lol", "xd", "xp")
#accuracy oznacza odsetek poprawnie zaklasyfikowanych obserwacji (czyli popr. zaklasyf. przez wszystkie)
#w moim przypadku najwyższe accuracy ma drzewo.opt (większe nawet niż las), więc jest modelem najlepszym

#.8.
rrr <- predict(drzewo.opt, newdata=test)
rrr
rrr <- as.vector(rrr[,2])
library(ROCR)
pred1 <- prediction(rrr, test$wage.binarna)
plot(performance(pred1,"tpr", "fpr"), col = "pink", lwd = 3, main = "ROC")
lines(c(0,1), c(0,1), type = "l", lwd = 3, col = "gray", lty = 2)


RYSOWANIE FUNKCJI NA ZADANEJ DZIEDZINIE

rysuj <- function(f, przedz) {
x <- seq(przedz[1], przedz[2], by = 0.1)
plot(x, f(x))
}

rysuj(cos, c(-2*pi, 2*pi))

DRZEWO KLASYFIKACYJNE, DRZEWO REGRESYJNE

# zadanie 3: - DRZEWO KLASYFIKACYJNE - (ZBIOR DANYCH ZA??????CZONY NA MOODLE)
# dane lemon, pochodz??? ze strony [link widoczny dla zalogowanych]
# prognozujemy czy auto zakupione na aukcji b???dzie udanym zakupem
# zmienna obja???niana: IsBadBuy Identifies if the kicked vehicle was an avoidable purchase, 1 - nieudany zakup
# zmienne obja???niaj???ce:
## Auction Auction provider at which the vehicle was purchased
## VehYear The manufacturer's year of the vehicle
## VehicleAge The Years elapsed since the manufacturer's year
## VehBCost Acquisition cost paid for the vehicle at time of purchase
# (1) Wczytaj zbi???r lemon, sprawd??? ile ma obserwacji i wy???wietl tabel??? cz???sto???ci dla zmiennej obja???nianej,
dane <- read.csv("lemon.csv")
nrow(dane)
table(IsBadBuy)

# (2) Wygeneruj 4 wykresy obok siebie w schemacie 2x2 (funkcja par()): 3 histogramy cz???sto???ci dla zmiennych obja???niaj???cych
# i 1 wykres dla zmiennej kategorycznej (wykorzystaj funkcje barplot()). Wyskaluj osie, zmie??? tytu???y wykres???w i ka???dy z nich
# pokoloruj na inny kolor.
par(mfrow = c(2,2))

hist(VehicleAge, freq = TRUE, col = "blue")
hist(VehYear, freq = TRUE, col = "orange")
hist(VehBCost, freq = TRUE, col = "green")
barplot(table(Auction), col = "yellow")

# (3) Podziel zbi???r wej???ciowy na zb treningowy (70%) i testowy (30%)
train <- sample(1:nrow(dane), 0.7*nrow(dane))
test <- dane[-train,]

# (4) Za pomoc??? pakietu rpart wygeneruj du???e drzewo dezycyjne, sprawd??? ile ma li???ci, a nast???pnie znajd??? jego optymaln??? wielko??????
# i zaznacz czerwonym kwadratem na wykresie zale???no???ci wielko???ci drzewa od b??????du kroswalidacyjnego xerror.
library(rpart)
drzewo <- rpart(IsBadBuy ~ VehicleAge+VehYear+VehBCost+Auction, data = dane, subset = train,
cp = 0.0001, method = "class")
plotcp(drzewo)
min.error <- which.min(drzewo$cptable[,"xerror"])
opt.size <- drzewo$cptable[min.error, "CP"]
points(min.error, drzewo$cptable[min.error, "xerror"], pch = 15, col = "red")

# (5) Przytnij skonstruowane drzewo do jego optymalnej wielko???ci, zwizualizuj i zinterpretuj wyniki.
drzewo2 <- prune.rpart(drzewo, cp = opt.size)
plot(drzewo2, margin = 0.1)
text(drzewo2, pretty = 0)

# (6) Oce??? na zbiorze testowym skonstruowany model za pomoc??? macierzy klasyfikacji: (prognozowane warto???ci vs rzeczywiste)
# oraz skonstruowanej krzywej ROC, na kt???rej zaznacz krzyw??? przerywan??? model losowy i czerwon??? kropk??? optimum
# (7) Zapisz krzyw??? ROC do pliku pdf - za pomoc??? funkcji pdf.
table(predict(drzewo2, newdata = test, type = "class"), test$IsBadBuy)

library(ROCR)
p <- predict(drzewo2, test)
p <- as.vector(p[,2])

pdf("krzywa ROC.pdf")
pred <- prediction(p, test$IsBadBuy)
plot(performance(pred, "tpr", "fpr"), colorize = T, lwd = 3)
lines(c(0,1), c(0,1), type = "l", lty = 2)
points(0,1, pch = 19, col = "red")
dev.off()

# zadanie 4: DRZEWO REGRESYJNE
# prognoza rocznych zarobk???w graczy w Baseball
# [link widoczny dla zalogowanych]
# zmienna obja???niana - Salary
# (1) Wczytaj zbi???r Hitters do??????czony do pakietu ISLR, wy???wietl pierwszych kilka wierszy
library(ISLR)
dane <- Hitters
head(dane)

# (2) Sprawd??? rozk???ad zmiennej Salary, narysuj dwa wykresy obok siebie i wyeksportuj je do pliku .jpg:
# pierwszy z nich to histogram cz???sto???ci w kolorze zielonym z odpowiednio wyskalowanyim osiami,
# a drugi to pomara???czowy wykres rozrzutu zmiennej Salary, na kt???rym kolorem niebieskim zaznacz warto?????? ???redni???,
# ???redni??? + 3 odchylenia stand, ???redni??? - 3 odchylenia stand Uwaga: zmienna Salary ma braki danych.
# Zmie??? nazwy osi i odpowiednio wyskaluj je, nadaj tytu???.
summary(Salary)

jpeg("wykresy.jpg")
par(mfrow=c(2,1))
hist(Salary, col = "green")
plot(Salary, col = "orange")
abline(h=c(mean(Salary, na.rm=T), mean(Salary, na.rm=T) + sd(Salary, na.rm = T),
mean(Salary, na.rm=T) - sd(Salary, na.rm = T)), col = "blue", lty = 2)
dev.off()

# (3) Podziel zbi???r na zbi???r treningowy i TESTOWY
set.seed(123)
index <- runif(1:nrow(dane)) < 0.7
train <- dane[index,]
test <- dane[!index,]

# (4) Wykonaj odpowiednie transformacje zmiennej Salary, ???eby skontruuowa??? nast???puj???ce 3 drzewa decyzyjne:
# piewsze z nich jako zmienn??? obja???nian??? ma zmienn??? Salary, drugie zmienn??? "Salary.OK", kt???ra braki danych ma zast???pione
# warto???ci??? ???redni???, a trzecie drzewo jest zbudowane na mniejszym zbiorze danych z usuni???tymi brakami danych zmiennej Salary.
Salary.OK <- Salary
Salary.OK[is.na(Salary.OK)] <- mean(Salary.OK, na.rm = T)

train <- cbind(train, Salary.OK = Salary.OK[index])
test <- cbind(test, Salary.OK = Salary.OK[!index])
str(train)
str(test)


drzewo1 <- rpart(Salary ~. -Salary.OK, data = train)
drzewo2 <- rpart(Salary.OK ~. - Salary, data = train)
drzewo3 <- rpart(Salary ~. - Salary.OK, data = train, na.action = na.omit)

# (5) Por???wnaj wygenerowane drzewa
print(sum(residuals(drzewo1)^2))
print(sum(residuals(drzewo2)^2))
print(sum(residuals(drzewo3)^2))

# (6) Zaprognozuj warto???ci Salary na zbiorze testowym i zapisz wyniki do pliku csv2.
Salary.prognoza <- predict(drzewo1, newdata = test)
write.csv2(Salary.prognoza, file="prognoza.csv")

par(mfrow=c(2,1))





> x <- "line 4322: He is now 25 years old, and weights 130lbs"
> y <- grepl("[[:digit:]]",x)
> y

[1] TRUE


Vector match:

>str <- c("Regular", "expression", "examples of R language")
>x <- grepl("x*ress",str)
>x

[1] FALSE TRUE FALSE



minimum z wielu liczb
min> pmin(5:1, pi) #-> 5 numbers
[1] 3.141593 3.141593 3.000000 2.000000 1.000000

wywoływanie zewnętrznego skryptu funkcji całego kodu sczytywanie

> list.files()
[1] "bottle1.R" "bottle2.R"


> source("bottle1.R")
[1] "This be a message in a bottle1.R!"


w wektorze może być tylko jeden typ zmiennych, automatycznie je zmienia
Vectors cannot hold values with different modes (types). Try mixing modes and see what happens:




sekwencja z określonym interwałem
> seq(5, 9, 0.5)
[1] 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0


kilka elementy wektora
> sentence[c(1, 3)]



tworzenie macierzy
plank <- 1:8
dim(plank) <- c(2, 4) // liczba wierszy liczba kolumn
print(plank)

albo

> matrix(1, 5, 5)

taka mapa sie rysuje (elevation jest macierza)
> contour(elevation)

wykres 3d wartosci macierzy
> persp(elevation)
> persp(elevation, expand=0.2) // zeby nie byly takie wielkie roznice

heatmap macierzy (tutaj volcano jst macierza)
> image(volcano)


wykresy
> weights <- c(300, 200, 100, 250, 150)
> prices <- c(9000, 5000, 12000, 7500, 18000)
> plot(weights, prices, pch=as.integer(types))
> legend("topright", c("gems", "gold", "silver"), pch=1:3)
albo
> legend("topright", levels(types), pch=1:length(levels(types)))



tworzenie ramki danych
> treasure <- data.frame(weights, prices, types)

wywoływanie całej kolumny ramki danych podwójne nawiasy
> treasure[[2]]
albo
> treasure[["weights"]]
albo (tutaj bez ""
> treasure$prices


sczytywanie danych
read.csv("table.csv") jak sa po przecinku

a jak jest txt i pooddzielane tabami i ma naglowki to

> read.table­("infantry­.txt", sep="­\t", header=TRUE)


łączenie tabel w R coś jak inner join w SQL i sam łączy po tych kolumnach które się nazywają tak samo

> targets <- read.csv("targets.csv")
> infantry <- read.table("infantry.txt", sep="\t", header=TRUE)
> merge(x = targets, y = infantry)

sprawdzanie czy jest korelacja między dwiema wartościami:
> cor.test(countries$GDP, countries$Piracy)

wyswietli sie cos tam cos tam p-value < 2.2e-16 no i wiadomo jak p<0.05 to jest korelacja


plotowanie rysowanie wykres zależności liniowej które się przydaje do estymacji
> line <- lm(countries$Piracy ~ countries$GDP)
> abline(line)

dobry pakiet do rysowania i wyświetlanie pomocy o pakiecie:
> install.packages("ggplot2")
> help(package = "ggplot2")

rysowanie z jego pomocą
> library(ggplot2)
> qplot(weights, prices, color = types)


The function ls lists simply the objects in memory (only names) :
> name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5
> ls()
[1] "m" "n1" "n2" "name"

pat jest od pattern i zwraca nam imiona tych rzeczy z pamieci ktore maja w nazwie "m"
> ls(pat= "m")
[1] "m" "name"

zaczynajace sie na m i usuniecie ich z pamieci:
> ls(pat= "^m")
>rm(list=ls(pat="^m"))

funkcja apropos wyswietla liste wszystkich funkcji zawierajacych w nazwie to slowo (z zainstalowanych pakietów)
> apropos(help)
wiecej szczegolow o tym co w pamieci:
> ls.str()

jak chcemy sprawdzić pomoc o wszystkim nie tylko z zainstalowanych pakietów:
> help("bs", try.all.packages = TRUE)

generowanie jakichś ciągów:
> sequence(4:5)
[1] 1 2 3 4 1 2 3 4 5

> gl(3, 5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

> gl(3, 5, length=30)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

> gl(2, 6, label=c("Male", "Female"))
[1] Male Male Male Male Male Male
[7] Female Female Female Female Female Female


wyświetlanie ramki danych ze wszystkimi kombinacjami, czyli tutaj bedzie 8 wierszy bo 2*2*2
> expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female"))

warunki nadawane na wektor, coś jak where albo having w sql, logical operators
x <- c(1:10)
x[(x>Cool | (x<5)]
# wypisze 1 2 3 4 9 10


nadawanie warunków na macierze (tutaj bierzemy te wiersze w ktorych pierwsza pozycja jest wieksza od 1)
macierz <- matrix(1:9, nrow = 3)
macierz
macierz[macierz[,1]>1]


rysowanie ładnych wykresów punktowych, zamiast mpg podstawiasz jakąś data frame albo tabelę. przydatna biblioteka do wykresów (w niej jest ggplot)
install.packages("tidyverse")
library(tidyverse)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
albo
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))


taki kozak wykres ze zamiast kropek jest ladna krzywa

ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))


filtrowanie wyników tak jak w where q sql:
filter(flights, month == 1, day == 1)

filter w R działa specyficznie jeśli chcemy stosować go z operatorem OR
filter(flights, month == 11 | month == 12) //tak nie zadziala bo sprawdzi czy 11 lub 12 jest prawda a jest prawda wiec da wartosc 1 i wypisze loty ze stycznia XDDD

A useful short-hand for this problem is x %in% y. This will select every row where x is one of the values in y. We could use it to rewrite the code above:

nov_dec <- filter(flights, month %in% c(11, 12))


porównywanie liczb (ogólnie lepiej unikać dzielenia):

sqrt(2) ^ 2 == 2
#> [1] FALSE

near(sqrt(2) ^ 2, 2)
#> [1] TRUE


sortowanie wyników w tabeli (tak jak order by w sql)
arrange(flights, year, desc(month), day) // (tabela, kolumnyyyy)

wyświetlanie tylko części danych:
select(flights, -(year:day)) //wszystko poza tymi kolumnami
select(flights, year:day)

There are a number of helper functions you can use within select():
starts_with("abc"): matches names that begin with “abc”.
ends_with("xyz"): matches names that end with “xyz”.
contains("ijk"): matches names that contain “ijk”.
matches("(.)\\1"): selects variables that match a regular expression. This one matches any variables that contain repeated characters. You’ll learn more about regular expressions in strings.
num_range("x", 1:3) matches x1, x2 and x3.



przesuwanie jakichś kolumn na początek tabeli (chyba):
select(flights, time_hour, air_time, everything())


definiowanie i dodawanie nowych kolumn (funkcja mutate), mozemy w mutate odwolywac sie do kolumn stworzonych w mutate:
flights_sml <- select(flights,
year:day,
ends_with("delay"),
distance,
air_time
)
mutate(flights_sml,
gain = arr_delay - dep_delay,
speed = distance / air_time * 60,
hours = air_time / 60,
gain_per_hour = gain / hours
)[/b]

albo

table1 %>%
mutate(rate = cases / population * 10000)

jeśli chcemy wywołać tylko nowe kolumny a starych nie (funkcja transmute):

transmute(flights,
gain = arr_delay - dep_delay,
hours = air_time / 60,
gain_per_hour = gain / hours
)

Ranking, numerowanie, częstość
y <- c(1, 2, 2, NA, 3, 4)
row_number(y)
#> [1] 1 2 3 NA 4 5
dense_rank(y)
#> [1] 1 2 2 NA 3 4
percent_rank(y)
#> [1] 0.00 0.25 0.25 NA 0.75 1.00
cume_dist(y)
#> [1] 0.2 0.6 0.6 NA 0.8 1.0
min_rank(y)
#> [1] 1 2 2 NA 4 5
min_rank(desc(y))
#> [1] 5 3 3 NA 2 1

summarizing values jakiejś tabeli sumaryczne średnie sumy minima maksima

summarise(flights, delay = mean(dep_delay, na.rm = TRUE))

najbardziej przydatne jak się zrobi grupowanie ale w sql chyba łatwiej:

by_day <- group_by(flights, year, month, day)
summarise(by_day, delay = mean(dep_delay, na.rm = TRUE))

coś jak grupowanie, liczebność według czegoś, jak count po group by w sql
# Compute cases per year
table1 %>%
count(year, wt = cases)


Złączenia łączenie tabel inner outer left right join
x <- tribble(
~key, ~val_x,
1, "x1",
2, "x2",
3, "x3"
)
y <- tribble(
~key, ~val_y,
1, "y1",
2, "y2",
4, "y3"
)


x %>%
inner_join(y, by = "key")

x %>%
left_join(y, by = "key")

x %>%
full_join(y, by = "key")

jak są różne nazwy kluczy:
by = c("a" = "b")


łączenie "pionowe" jak union w sql:
semi_join(x, y) keeps all observations in x that have a match in y. //nigdy nie duplikuje
anti_join(x, y) drops all observations in x that have a match in y.

są też takie funkcje jak w sql:
df1 <- tribble(
~x, ~y,
1, 1,
2, 1
)
df2 <- tribble(
~x, ~y,
1, 1,
1, 2
)

intersect(df1, df2)
union(df1, df2)
setdiff(df1, df2) // dziala jak except w sql


o co chodzi z factorami faktorami:
x1 <- c("Dec", "Apr", "Jan", "Mar")

sort(x1)
#> [1] "Apr" "Dec" "Jan" "Mar" // posortuje nam po prostu alfabetycznie bo nie ma leveli, a jak zrobimy factor to będą

month_levels <- c(
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
)
y1 <- factor(x1, levels = month_levels) //stworzenie factora

//teraz juz dziala sortowanie i jakby ktos wpisal np. "jam" to pokaże "NA" bo nie jest to żaden level



data godzina czas minuta sekunda datepart datediff day month
library(tidyverse)
library(lubridate)
library(nycflights13)

ymd("2017-01-31")
#> [1] "2017-01-31"
mdy("January 31st, 2017")
#> [1] "2017-01-31"
dmy("31-Jan-2017")
#> [1] "2017-01-31"
ymd(20170131)
#> [1] "2017-01-31"
ymd_hms("2017-01-31 20:11:59")
#> [1] "2017-01-31 20:11:59 UTC"
mdy_hm("01/31/2017 08:01")
#> [1] "2017-01-31 08:01:00 UTC"
today()
#> [1] "2017-05-04"
now()
#> [1] "2017-05-04 12:13:13 UTC"


dzień roku albo dzień tygodnia
yday() (day of the year), wday() (day of the week)
wday(datetime, label = TRUE, abbr = FALSE) //label true zwraca skrot a abbr false zwraca pelna nazwe zamiast 2 masz 'tuesday'

i dużo jest innych funkcji z datą i czasem:
[link widoczny dla zalogowanych]




takie jak w SQL wybranie kolumn pod jakimś warunkiem (może być nałożony na inne kolumny):

newdata <- subset(mydata, age >= 20 | age < 10,
select=c(ID, Weight))


fajne podsumowanie (liczba obserwacji wedlug karatow w przedzialach 0.5)

diamonds %>%
count(cut_width(carat, 0.5))


IMPORT
read_csv() reads comma delimited files, read_csv2() reads semicolon separated files (common in countries where , is used as the decimal place), read_tsv() reads tab delimited files, and read_delim() reads in files with any delimiter.


DZIAŁANIA NA STRINGACH, DWA RÓŻNE SPOSOBY ZAPISU:
no_vowels_1 <- !str_detect(words, "[aeiou]")
no_vowels_2 <- str_detect(words, "^[^aeiou]+$")

DZIAŁANIA NA STRINGACH, HEURYSTYCZNE WYKRYWANIE RZECZOWNIKÓW:
noun <- "(a|the) ([^ ]+)"

przed nim jest the lub a i zawiera co najmniej jeden znak niebedacy spacja


DZIAŁANIA NA STRINGACH, ZAMIANA DRUGIEGO Z TRZECIM SŁOWEM
str_replace("([^ ]+) ([^ ]+) ([^ ]+)", "\\1 \\3 \\2")


różne typy wektorów: 12121212 i 111222
y = rep(1:2, 2)
y = rep(1:2, each = 2)


The post has been approved 0 times

Last edited by Admin on Fri 13:24, 09 Feb 2018; edited 67 times in total
Back to top
View user's profile
Display posts from previous:   
Post new topic   Reply to topic    www.lefty.fora.pl Forum Index -> Autographs All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
gGreen v1.3 // Theme created by Sopel & Programosy
Regulamin