Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2018-09-12, 18:57
  #13
Medlem
Laxons avatar
Citat:
Ursprungligen postat av Stadsplanerare
Ska läsa en kurs i statistik och R nu till våren. Den ges på distans av KI. Kursplan: http://ki.se/selma/syllabus/1QA098

Undrar om det finns tidigare kursare här, men förstås också vilka tips ni statistik-/R-kunniga har till en gröngöling. Vart börjar man?

Swirl är gjort för att självlära sig R, mycket pedagogisk.
För att installera, kör:

Kod:
install.packages('swirl') 
library(swirl) 
swirl()
Citera
2018-10-09, 20:03
  #14
Medlem
r4ll3s avatar
Hej!

Jag har en variabel med namnet medel med flytande värden, innehållande ca 1300 observationer. Under en annan variabel quartile är 150 av dessa även markerade med "0", resterande med "NA".

Kod:
head(men)[26:27]
      medel quartile
1  0.000000       0
2  3.412323        NA
3  3.01246         0
4 11.234358        NA
5 15.734323        NA
6 12.6123415     0

Skulle vilja fylla värden i variabeln quartile, där alla värden i medel förutom alla fall där quartile == "0", indelas i kvartiler, med siffrorna 1-4.

Låt säga att kvartilerna för medel är:
0-25%: 0-8
25-50%: 8-16
50-75%: 16-26
75-100: 26-400

Då vill jag att de ska få värdena 1,2,3 respektive 4 i variabeln quartile.

Hur går jag tillväga? Jag har svårt att få grepp om quantile-fuktionen och dessutom att förstå hur jag ska skapa villkoret i R för att uppnå mitt mål.

Tack på förhand.
__________________
Senast redigerad av r4ll3 2018-10-09 kl. 20:08.
Citera
2018-10-20, 22:43
  #15
Medlem
r4ll3s avatar
Citat:
Ursprungligen postat av r4ll3
Hej!

Jag har en variabel med namnet medel med flytande värden, innehållande ca 1300 observationer. Under en annan variabel quartile är 150 av dessa även markerade med "0", resterande med "NA".

Kod:
head(men)[26:27]
      medel quartile
1  0.000000       0
2  3.412323        NA
3  3.01246         0
4 11.234358        NA
5 15.734323        NA
6 12.6123415     0

Skulle vilja fylla värden i variabeln quartile, där alla värden i medel förutom alla fall där quartile == "0", indelas i kvartiler, med siffrorna 1-4.

Låt säga att kvartilerna för medel är:
0-25%: 0-8
25-50%: 8-16
50-75%: 16-26
75-100: 26-400

Då vill jag att de ska få värdena 1,2,3 respektive 4 i variabeln quartile.

Hur går jag tillväga? Jag har svårt att få grepp om quantile-fuktionen och dessutom att förstå hur jag ska skapa villkoret i R för att uppnå mitt mål.

Tack på förhand.

Löste detta med hjälp av smart_cut funktionen från cutr biblioteket.

Installeras genom:
Kod:
install.packages("devtools")
devtools::install_github("moodymudskipper/cutr")

Lösningen för mitt problem som jag skrev ihop:
Kod:
ds$quartile[ds$medel != 0 & !is.na(ds$medel)] <- smart_cut(ds$medel[ds$medel != 0 & !is.na(ds$medel)], 4, what = "groups", output = "numeric")

Har lagt till villkor för NA-värden då jag hade vissa sådana i min medel-variabel. Borde gå att göra nåt liknande med funktioner som redan finns i R men förstod mig aldrig på cut och quantile-funktionerna så körde på denna variant istället.
Citera
2018-10-25, 22:57
  #16
Medlem
r4ll3s avatar
Har försökt leta efter en funktion som fungerar liknande som subset som kan sovra fram rader ur ett dataset givet särskilt villkor, fast jag behövt en funktion som istället sovrar bort element/rader givet ett villkor. Det kan nämligen ibland vara rätt så svårt att försöka vända på villkoren för att sovra bort något, särskilt när man har många.

Skapade därför en funktion för att lösa problemet:

Kod:
rmROWS=function(conditions){
dataframe=get(sub("\\$.*","",deparse(substitute(conditions))))
row.names(dataframe) <- NULL
return(dataframe[-as.integer((row.names(dataframe[conditions,]))),])
}

#EXEMPEL START#

test1=infert  # one argument for efficiency ;)
test1=rmROWS(test1$age==30)

test2=infert  # multiple targets (no limits)
test2=rmROWS(test2$age<30 | test2$education=="6-11yrs")

#EXEMPEL END#

Skillnaden mellan denna och subset är att jag inte efterlyser dataset som argument, men nåväl, ingen större skillnad kanske.

Skulle vara intressant om någon vet ifall det finns någon funktion som gör det jag efterfrågar? Om inte kanske jag får skapa en package från min kod.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback