Qurak

Replace or remove invalid or missing data

Anleitung 23 Schritte, der Reihe nach in einer Sitzung ausgeführt. Jeder Schritt wurde gegen die Engine ausgeführt, und die Ausgabe unten ist, was er erzeugte.

Schritt 1
gdps = Map[CountryData[#, "GDP"]&, CountryData[All]];

Keine Ausgabe - dieser Schritt bereitet etwas für den nächsten vor.

Schritt 2
Take[gdps, 10]
Ausgabe
Take[CountryData[CountryData[All, GDP]], 10]
Schritt 3
Max[gdps]
Ausgabe
CountryData[CountryData[All, GDP]]
Schritt 4
Count[gdps, _Missing]
Ausgabe
0
Schritt 5
Length[gdps]
Ausgabe
1
Schritt 6
filteredgdps = DeleteCases[gdps, _Missing];

Keine Ausgabe - dieser Schritt bereitet etwas für den nächsten vor.

Schritt 7
{Length[filteredgdps], Max[filteredgdps]}
Ausgabe
{1, CountryData[CountryData[All, GDP]]}
Schritt 8
data = {{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {4, 88.6, 1.9}, {1, 62.3, 1.8}, {1, 82.7, "NA"}, {1, 35.5, 1.84}};

Keine Ausgabe - dieser Schritt bereitet etwas für den nächsten vor.

Schritt 9
Grid[data, Dividers -> All]
Ausgabe
Grid[{{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {4, 88.6, 1.9}, {1, 62.3, 1.8}, {1, 82.7, NA}, {1, 35.5, 1.84}}, Dividers -> All]
Schritt 10
baddata[entry_] := Not[MatchQ[entry, {1 | 2, _ ? NumberQ, _ ? NumberQ}]]

Keine Ausgabe - dieser Schritt bereitet etwas für den nächsten vor.

Schritt 11
DeleteCases[data, _ ? baddata]
Ausgabe
{{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {1, 62.3, 1.8}, {1, 35.5, 1.84}}
Schritt 12
badgroup[entry_] := Not[MatchQ[entry[[1]], 1 | 2]]

Keine Ausgabe - dieser Schritt bereitet etwas für den nächsten vor.

Schritt 13
filtereddata = DeleteCases[data, _ ? badgroup]
Ausgabe
{{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {1, 62.3, 1.8}, {1, 82.7, NA}, {1, 35.5, 1.84}}
Schritt 14
group1 = Select[filtereddata, #[[1]] === 1&]
Ausgabe
{{1, 71.6, 0.41}, {1, 46., 2.72}, {1, 89.1, 3.75}, {1, 62.3, 1.8}, {1, 82.7, NA}, {1, 35.5, 1.84}}
Schritt 15
group1mean = Mean[Select[group1[[All, -1]], NumberQ]]
Ausgabe
2.104
Schritt 16
filtereddata[[All, 3]] = filtereddata[[All, 3]] /. "NA" -> group1mean
Ausgabe
{0.41, 4.96, 0.18, 2.72, 1.06, 3.75, 1.8, 2.104, 1.84}
Schritt 17
Grid[filtereddata, Dividers -> All]
Ausgabe
Grid[{{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {1, 62.3, 1.8}, {1, 82.7, 2.104}, {1, 35.5, 1.84}}, Dividers -> All]
Schritt 18
replaceByGroup[data_, col_, groupcol_, f_] := Block[{columnvals, funvals, grouped, groups, rules},
	columnvals = data[[All, {groupcol, col}]];
	If[VectorQ[columnvals[[All, 2]], NumericQ],
	columnvals[[All, 2]],
	grouped = GatherBy[columnvals, First];
	groups = grouped[[All, 1, 1]];
	funvals = Table[f[Select[grouped[[i]][[All, 2]], NumericQ]], {i, Length[groups]}];
	rules = Table[Rule[{groups[[i]], _ ? (Not[NumericQ[#]]&)}, {groups[[i]], funvals[[i]]}], {i, Length[groups]}];
	Replace[columnvals, rules, {1}][[All, 2]]]]

Keine Ausgabe - dieser Schritt bereitet etwas für den nächsten vor.

Schritt 19
newdata = DeleteCases[data, _ ? badgroup]
Ausgabe
{{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {1, 62.3, 1.8}, {1, 82.7, NA}, {1, 35.5, 1.84}}
Schritt 20
replaceByGroup[newdata, 3, 1, Mean]
Ausgabe
{0.41, 4.96, 0.18, 2.72, 1.06, 3.75, 1.8, 2.104, 1.84}
Schritt 21
replaceByGroup[newdata, 3, 1, Median]
Ausgabe
{0.41, 4.96, 0.18, 2.72, 1.06, 3.75, 1.8, 1.84, 1.84}
Schritt 22
Grid[Transpose[Table[If[j == 1, newdata[[All, j]], replaceByGroup[newdata, j, 1, Mean]], {j, Length[newdata[[1]]]}]]]
Ausgabe
Grid[{{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {1, 62.3, 1.8}, {1, 82.7, 2.104}, {1, 35.5, 1.84}}]
Schritt 23
Grid[Transpose[{newdata[[All, 1]], replaceByGroup[newdata, 2, 1, Mean], replaceByGroup[newdata, 3, 1, Median]}]]
Ausgabe
Grid[{{1, 71.6, 0.41}, {2, 27.2, 4.96}, {2, 59.3, 0.18}, {1, 46., 2.72}, {2, 42.2, 1.06}, {1, 89.1, 3.75}, {1, 62.3, 1.8}, {1, 82.7, 1.84}, {1, 35.5, 1.84}}]

Verwendete Funktionen

Verwandte Rezepte

Alle Rezepte · Funktionsreferenz · Dies aus einem MCP-Client verwenden