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.
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)
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
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ää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.