Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: R: CSV-tiedoston tyhjien arvojen täyttäminen keskiarvolla

Jaska [09.05.2017 19:13:14]

#

Mitenkä tehdään Windowsin puolella seuraava: Mulla on CSV tiedosto, jossa on lukuja sarakkeissa A-S ja riveillä 1-1460. Jotkut solut ovat tyhjiä. Minun pitäisi täyttää kukin tyhjä solu alueelta A1-S1460 sillä keskiarvolla, jonka kyseisen sarakkeen epätyhjät arvot muodostavat. Käytössä on ainakin LibreOffice, Python ja R.

Metabolix [10.05.2017 12:43:01]

#

Siis kaikkiin tyhjiin soluihin tulee sama luku? Laske ensin se keskiarvo ja aseta se sitten tyhjiin soluihin. R:llä onnistuu esim. näin:

d <- read.csv(file = "tmp-in.csv")
m <- mean(unlist(d), na.rm = TRUE)
d[is.na(d)] <- m
write.csv(d, file = "tmp-out.csv", row.names = FALSE)

Jaska [10.05.2017 13:43:05]

#

Metabolix kirjoitti:

Siis kaikkiin tyhjiin soluihin tulee sama luku?

Siis jos tietyssä sarakkeessa on useita tyhjiä, niin näihin tyhjiin soluihin tulee sama keskiarvo. Mutta eri sarakkeissa oleviin tyhjiin soluihin voi tulla eri keskiarvo, koska se lasketaan vain kyseisen sarakkeen arvoista.

d <- read.csv(file = "tmp-in.csv")
m <- mean(unlist(d), na.rm = TRUE)

Mulla meni tässä kohta pieleen:

Warning message:
In mean.default(unlist(d), na.rm = TRUE) :
  argument is not numeric or logical: returning NA

Metabolix [10.05.2017 16:19:25]

#

Kas, luin jotenkin väärin. Seuraava koodi käy läpi eri sarakkeet:

d <- read.csv(file = "tmp-in.csv")
for (i in names(d)) {
	d[[i]][is.na(d[[i]])] <- mean(d[[i]], na.rm = TRUE)
}
write.csv(d, file = "tmp-out.csv", row.names = FALSE)

Syöte:

col1,col2,col3
1,4,7
3,,
,6,

Tuloste:

"col1","col2","col3"
1,4,7
3,5,7
2,6,7

Saamasi varoitus johtuu siitä, että sinulla on jossain kohti myös muuta kuin numeroita tai tyhjää.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta