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: 89
Registriert: Fr Mär 16, 2018 4:08 pm

multiple Auswahl und selektion

Beitrag 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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: multiple Auswahl und selektion

Beitrag 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
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: multiple Auswahl und selektion

Beitrag von wbart »

Danke, ich probier das gleich mal aus.
Antworten