Ich arbeite derzeit mit Daten in einem * CSV. Ich habe bereits ein effektives Skript, um meine Daten zu plotten, aber ich stehe vor der scheinbar einfachsten Aufgabe. Ich versuche, ein Skript zu schreiben, das meine Daten (in Spalten angeordnet) aufnimmt und den Mittelwert nach Spalte berechnet und in ein neues Dokument schreibt (./ testAVG).Berechnen und schreiben Mittelwert und SD für Spalten in R
Auch ich versuche, die gleichen Daten zu nehmen, berechnen Sie die SD (nach Spalte) und fügen Sie diese Daten an das Ende des Originaldokuments (vorzugsweise in einer Wiederholung für die Gesamtzahl der Zeilen von Daten, die ich habe) .
Hier ist das Skript, das ich habe bisher:
#Number of lines with data
Nlines = 5
#Number of lines to skip
Nskip = 0
chem <- read.table("./test.csv", skip=Nskip, sep=",", col.names = c("Sample", "SiO2", "Al2O3", "FeO", "MgO", "CaO", "Na2O", "K2O", "Total", "eSiO2", "eAl2O3", "eFeO", "eMgO", "eCaO", "eNa2O", "eK2O"), fill=TRUE, header = TRUE, nrow=Nlines)
sd1 <- sd(chem$SiO2)
sd2 <- sd(chem$Al2O3)
sd3 <- sd(chem$FeO)
sd4 <- sd(chem$MgO)
sd5 <- sd(chem$CaO)
sd6 <- sd(chem$Na2O)
sd7 <- sd(chem$K2O)
avg1 <- colMeans(chem$SiO2, na.rm = FALSE, dims=1)
avg2 <- colMeans(chem$Al2O3, na.rm = FALSE, dims=1)
avg3 <- colMeans(chem$FeO, na.rm = FALSE, dims=1)
avg4 <- colMeans(chem$MgO, na.rm = FALSE, dims=1)
avg5 <- colMeans(chem$CaO, na.rm = FALSE, dims=1)
avg6 <- colMeans(chem$Na2O, na.rm = FALSE, dims=1)
avg7 <- colMeans(chem$K2O, na.rm = FALSE, dims=1)
write <- write.table(sd1,sd2,sd3,sd4,sd5,sd6,sd7, file="./test.csv", append=TRUE, sep=",", dec=".", col.names = c("eSiO2", "eAl2O3", "eFeO", "eMgO", "eCaO", "eNa2O", "eK2O"))
write <- write.table(avg1, avg2, avg3, avg4, avg5, avg6, avg7, file="./testAVG.csv", append=FALSE, sep=",", dec=".", col.names = c("Sample", "SiO2", "Al2O3", "FeO", "MgO", "CaO", "Na2O", "K2O", "Total"))
Die Daten, die ich mit Arbeit bin dieses
Sample, SiO2, Al2O3, FeO, MgO, CaO, Na2O, K2O, Total,eSiO2,eAl2O3,eFeO,eMgO,eCaO,eNa2O,eK2O
01,65.01,14.77,0.34,1.31,17.27,1.14,0.2,100,,,,,,,
02,72.6,16.27,0.53,0.06,1.27,5.55,3.71,100,,,,,,,
03,64.95,14.65,0.18,1.29,17.48,1.21,0.23,100,,,,,,,
04,64.95,14.65,0.18,1.29,17.48,1.21,0.23,100,,,,,,,
ist ich diesen Fehler:
Error in colMeans(chem$SiO2, na.rm = FALSE, dims = 1) :
'x' must be an array of at least two dimensions
Irgendwelche Tipps? Dank
Sie nicht 'write.table' wie folgt aufrufen können:' write.table (SD1, SD2, SD3, SD4, SD5, SD6, SD7, ...) '; Es braucht ein einzelnes Objekt ("x") zum Schreiben. Außerdem verwenden Sie 'colMeans' auf einem Vektor (' colMeans (chem $ SiO2, ...) '), aber es erwartet ein Array. Sie sollten wirklich die Dokumentation lesen ('? Write.table','? ColMeans'), es ist aus einem bestimmten Grund da. – nrussell
Verwenden Sie die Funktionen 'apply' /' lapply'/'sapply'. – user2100721
'colMeans' erwartet eine Matrix oder' dat.frame' nicht einen Vektor. Führen Sie 'colMeans (chem)' aus, um Mittelwerte für alle Spalten zu erhalten. –