Mam duży plik pełen takich rekordów
1, 2, 4, 5, 6
1, 3, 5, 6, 3
1, 4, 5, 6, 6
2, 4, 5, 5, 5
2, 3, 4, 5, 2
w każdym razie muszę wziąć średnią wszystkich wierszy z tym samym pierwszym numerem (kluczem). to znaczy
1, 3, 4.66, 5.66, 5
2, 3.5, 4.5, 5, 3.5
Wiem, że jest to coś, w czym świetny byłby awk / sed, po prostu nie mam wystarczającego doświadczenia z nimi, aby to osiągnąć, dzięki!
A co powiesz na uśrednianie tych kolumn razem? więc po wysłaniu tego do pliku id chce uzyskać inny, taki jak:
1, 4.58
1, 4.125
Liczba kolumn do dodania może nie zawsze wynosić 4.
EDYCJA: może to być łatwiejsze do zrobienia w gnuplot, więc potrzebuję głównie odpowiedzi na pierwszą część.
Odpowiedzi:
W przypadku pierwszej opcji:
W przypadku drugiej opcji:
ale nie jestem pewien, czy rozumiem, dlaczego chcesz mieć średnią z niektórych średnich.
źródło
Jest to zaskakująco trudne i skomplikowane przy użyciu Sed, więc oto hack Pythona, aby to zrobić:
Działa to niezależnie od kolejności rzędów, o ile rzędy z tym samym pierwszym elementem mają tę samą długość.
Uśrednianie razem kolumn zajmie jeszcze jedną linię Pythona w pętli for:
Biorąc jednak pod uwagę ogromną liczbę list, prawdopodobnie lepiej jest rozwiązać ten problem za pomocą NumPy lub Matlab.
źródło
Karthik ma dobrą sugestię, aby zrobić to w Numpy: to tylko kilka linijek,
Lub jeśli chcesz uśrednić kolumny razem, ostatni wiersz zmieni się na
źródło