데이터의 ID가 동일한 경우(제 경우에는 같은 날이지만 다른 시간) 평균을 계산하고 싶습니다. 시간별/시간별 데이터를 기준으로 내 데이터의 일일 평균을 계산하는 것입니다. 내 데이터는 아래와 같습니다.
Date hour value
06/21/1978 14:00:00 1
06/21/1978 15:00:00 2
06/21/1978 16:00:00 3
06/21/1978 17:00:00 4
06/21/1978 18:00:00 5
06/21/1978 19:00:00 6
06/21/1978 20:00:00 7
06/21/1978 21:00:00 7
06/21/1978 22:00:00 9
06/21/1978 23:00:00 10
06/22/1978 00:00:00 5
06/22/1978 01:00:00 5
06/22/1978 02:00:00 5
06/22/1978 03:00:00 7
06/22/1978 04:00:00 8
06/22/1978 05:00:00 9
06/22/1978 06:00:00 22
06/22/1978 07:00:00 56
06/22/1978 08:00:00 9
06/22/1978 09:00:00 12
06/22/1978 10:00:00 3
06/22/1978 11:00:00 5
06/22/1978 12:00:00 7
내가 원하는 출력은
Date value
06/21/1978 5.4
06/22/1978 11.7692307692
답변1
이는 본질적으로 Stephane의 솔루션과 동일 awk
하지만 Perl로 코딩되었습니다. 날짜 순서가 유지됩니다.
perl -ane 'if($.==1){print "$F[0]\t$F[2]\n"; next}
$k{$F[0]}+=$F[2]; $l{$F[0]}++;
END{print "$_\t",$k{$_}/$l{$_},"\n" for (sort keys(%k))}' data
답변2
awk 'NR==1{print $1,$3; next}
{v[$1]+=$3;n[$1]++}
END{for (i in n) print i, v[i]/n[i]}'
주문은 보장되지 않습니다. 입력 자체가 날짜별로 정렬된 경우 날짜가 변경되자마자 인쇄할 수 있습니다.
awk 'NR==1{print $1,$3; next}
{if (n && $1 != l) {print l, v/n; n=0; v=0}
v+=$3; n++; l=$1}
END{if (n) print l, v/n}'
답변3
PROCINFO["sorted_in"]
GNU awk를 사용하여 날짜 순서대로 배열을 강제로 순회한다는 점 을 제외하면 Stephane의 솔루션과 매우 유사합니다 .
awk 'BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"};
NR==1{print $1,$3; next};
{arr[$1]+=$3; ++arr2[$1]};
END{for (k in arr) print k, arr[k]/arr2[k]}' test.1 | column -t