Seite 1 von 1

multiple Auswahl und selektion

Verfasst: Mo Nov 04, 2019 1:39 pm
von wbart
Hallo,

ich hoffe hiermit erfülle ich die Anforderungen an den Beispieldatensatz:

Code: Alles auswählen

rohdaten_keratine <- ### aus: dput(head(rohdaten_keratine))
structure(list(`8633 A` = c(234768, 3572.07, 190822, 128481, 
73935.8, 233246), `8633 B` = c(226119, 3373.79, 201157, 121698, 
65804.2, 213549), `8633 C` = c(22001, 2968.28, 162145, 124184, 
67417.6, 158224), `8633 D` = c(224774, 3726.87, 200107, 133111, 
64427.2, 189392), `8635 A` = c(238203, 3990.65, 155037, 149084, 
65804.2, 153515), `8635 B` = c(236117, 3322.97, 165415, 106530, 
60189.4, 265126), `8635 C` = c(242786, 3305.2, 204.38, 128481, 
88185.1, 274339), `8635 D` = c(245458, 3866.31, 157157, 133111, 
57089.9, 251097), `8636 A` = c(231448, 3974.79, 138716, 133111, 
68130.7, 283427), `8636 B` = c(22849, 4335.19, 183643, 119179, 
81401.4, 317104), `8636 C` = c(221678, 3830.24, 143884, 128481, 
57694.1, 253638), `8636 D` = c(229818, 4099.72, 192.06, 119179, 
86194.3, 266902), `8637 A` = c(227187, 3447.05, 152809, 128481, 
63694.4, 244714), `8637 B` = c(251749, 3501.63, 168464, 126486, 
73470.9, 206607), `8637 C` = c(227436, 3856.25, 147021, 138111, 
47768.2, 298272), `8637 D` = c(231284, 3697.26, 156019, 128481, 
47768.2, 441.37), `8638 A` = c(23399, 5696.11, 196031, 128481, 
88185.1, 309269), `8638 B` = c(217423, 6151.81, 190959, 108214, 
101699, 928817), `8638 C` = c(222493, 5574.28, 236281, 112816, 
96968.1, 351294), `8638 D` = c(225327, 5018.58, 178806, 121698, 
92535.7, 165641), `8639 A` = c(214326, 6012.36, 179638, 117162, 
108214, 179242), `8639 B` = c(227976, 6100.43, 166523, 119179, 
103874, 917168), `8639 C` = c(222781, 5954.46, 165.93, 128481, 
93054, 163.47), `8639 D` = c(227569, 6107.98, 210825, 124184, 
96129.3, 205986), `8640 A` = c(238764, 6065.48, 196.78, 133111, 
91004.4, 211942), `8640 B` = c(231472, 5368.8, 221954, 121698, 
95509.2, 404965), `8640 C` = c(22639, 4860, 281751, 124184, 84165.1, 
1538.49), `8640 D` = c(238791, 6058.2, 240332, 126486, 88801.3, 
317437), `B-14-03` = c(222539, 226237, 3540.4, 144303, 19037, 
46974.3), `B-14-04` = c(227127, 394125, 6844.21, 144303, 14157.7, 
21729.2), `B-14-05` = c(227761, 871665, 8085.82, 138111, 17168.3, 
4193.63), `B-14-06` = c(227274, 856076, 2158.14, 128481, 9823.78, 
3247.28)), row.names = c("KRT12", "KRT18", "KRT9", "KRT10", "KRT17", 
"KRT2"), class = "data.frame")
Ich möchte nun für jede Spalte die 4 höchsten Werte selektieren und diese zusammen mit ihren entsprechenden rownames in einer neuen Tabelle niederschreiben. Außerdem möchte ich wissen welche der so selektierten rownames in allen Spalten vorkommt.

Für eine Lösung wäre ich sehr dankbar.

VG
wbart

Re: multiple Auswahl und selektion

Verfasst: Mo Nov 04, 2019 1:50 pm
von jogo
Hallo wbart,

ich habe Deine Daten nochmal etwas reduziert:

Code: Alles auswählen

kera <- rohdaten_keratine[1:6]

sapply(kera, function(x) head(sort(x, decreasing=TRUE), 4))
sapply(kera, function(x) rownames(kera)[head(order(x, decreasing=TRUE), 4)])
Den letzten Teil muss ich noch bearbeiten ...
... so, jetzt:

Code: Alles auswählen

L <- lapply(kera, function(x) rownames(kera)[head(order(x, decreasing=TRUE), 4)])
Linter <- L[[1]]
for (l in L[-1]) Linter <- intersect(Linter, l)
Linter
und es geht noch einfacher:

Code: Alles auswählen

L <- lapply(kera, function(x) rownames(kera)[head(order(x, decreasing=TRUE), 4)])
Reduce(intersect, L)
Du könntest aber auch mit den Zeilennummern arbeiten und erst am Ende die zugehörigen Namen generieren:

Code: Alles auswählen

L <- lapply(kera, function(x) head(order(x, decreasing=TRUE), 4))
rownames(kera)[Reduce(intersect, L)]
Gruß, Jörg

Re: multiple Auswahl und selektion

Verfasst: Mi Nov 06, 2019 9:26 am
von wbart
Danke, ich probier das gleich mal aus.