Verwenden von „st“ (https://github.com/nferraz/st)
$ st numbers.txt
N min max sum mean stddev
10 1 10 55 5.5 3.02765
Oder:
$ st numbers.txt --transpose
N 10
min 1
max 10
sum 55
mean 5.5
stddev 3.02765
(HAFTUNGSAUSSCHLUSS:Ich habe dieses Tool geschrieben :))
Für den Durchschnitt, den Median und die Standardabweichung können Sie awk verwenden . Dies ist im Allgemeinen schneller als R Lösungen. Im Folgenden wird beispielsweise der Durchschnitt ausgegeben :
awk '{a+=$1} END{print a/NR}' myfile
(NR ist ein awk Variable für die Anzahl der Datensätze, $1 bedeutet das erste (durch Leerzeichen getrennte) Argument der Zeile ($0 wäre die ganze Zeile, die auch hier funktionieren würde, aber im Prinzip weniger sicher wäre, obwohl es für die Berechnung wahrscheinlich sowieso nur das erste Argument nehmen würde) und END bedeutet, dass die folgenden Befehle ausgeführt werden, nachdem die gesamte Datei verarbeitet wurde (man hätte auch a initialisieren können bis 0 in einem BEGIN{a=0} Erklärung)).
Hier ist ein einfaches awk Skript, das detailliertere Statistiken liefert (nimmt eine CSV-Datei als Eingabe, ändern Sie andernfalls FS ) :
#!/usr/bin/awk -f
BEGIN {
FS=",";
}
{
a += $1;
b[++i] = $1;
}
END {
m = a/NR; # mean
for (i in b)
{
d += (b[i]-m)^2;
e += (b[i]-m)^3;
f += (b[i]-m)^4;
}
va = d/NR; # variance
sd = sqrt(va); # standard deviation
sk = (e/NR)/sd^3; # skewness
ku = (f/NR)/sd^4-3; # standardized kurtosis
print "N,sum,mean,variance,std,SEM,skewness,kurtosis"
print NR "," a "," m "," va "," sd "," sd/sqrt(NR) "," sk "," ku
}
Es ist einfach, min/max zu diesem Skript hinzuzufügen, aber es ist genauso einfach, sort zu pipen &head /tail :
sort -n myfile | head -n1
sort -n myfile | tail -n1
Mit R ist das ein Kinderspiel. Für eine Datei, die so aussieht:
1
2
3
4
5
6
7
8
9
10
Verwenden Sie dies:
R -q -e "x <- read.csv('nums.txt', header = F); summary(x); sd(x[ , 1])"
Um dies zu erhalten:
V1
Min. : 1.00
1st Qu.: 3.25
Median : 5.50
Mean : 5.50
3rd Qu.: 7.75
Max. :10.00
[1] 3.02765
- Die
-qFlag unterbindet die Startup-Lizenzierung und die Hilfeausgabe von R - Die
-eFlag teilt R mit, dass Sie einen Ausdruck vom Terminal übergeben werden xist eindata.frame- im Grunde ein Tisch. Es ist eine Struktur, die mehrere Vektoren/Datenspalten aufnimmt, was ein wenig eigenartig ist, wenn Sie nur einen einzelnen Vektor einlesen. Dies hat Auswirkungen darauf, welche Funktionen Sie nutzen können.- Einige Funktionen, wie
summary(), passen natürlichdata.frames. Wennxhatte mehrere Felder,summary()würde die obigen beschreibenden Statistiken für jeden bereitstellen. - Aber
sd()kann jeweils nur einen Vektor nehmen, weshalb ichxindiziere für diesen Befehl (x[ , 1]gibt die erste Spalte vonxzurück ). Sie könntenapply(x, MARGIN = 2, FUN = sd)verwenden um die SDs für alle Spalten zu erhalten.