multiple Auswahl und selektion

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
wbart
Beiträge: 45
Registriert: Fr Mär 16, 2018 4:08 pm

multiple Auswahl und selektion

Beitrag von wbart » Mo Nov 04, 2019 1:39 pm

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

jogo
Beiträge: 1509
Registriert: Fr Okt 07, 2016 8:25 am

Re: multiple Auswahl und selektion

Beitrag von jogo » Mo Nov 04, 2019 1:50 pm

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

wbart
Beiträge: 45
Registriert: Fr Mär 16, 2018 4:08 pm

Re: multiple Auswahl und selektion

Beitrag von wbart » Mi Nov 06, 2019 9:26 am

Danke, ich probier das gleich mal aus.

Antworten