2017-06-23 2 views
0

Ich kämpfe mit der Manipulation von Listen; Jetzt möchte ich alle Unterelemente in einem Element, außer dem ersten, in einem Vorgang, wenn möglich, verbinden.R: wie man auf eine Liste eine Funktion anwendet, die alle Unterelemente mit Ausnahme der ersten verbindet

Zum Beispiel habe ich eine Liste, die wie folgt aussieht:

[[1]] [1] "A" "B" "C" "D" "E" "F"

[[2]] [1] "A" "B" "C"

[[3]] [1] "A" "B" "C" "D"

[[4 1]] [] "A" "B" "C" "D"

[[5]] [1] "A" "B" "C" "D" "E"

Und ich möchte dies erhalten:

[[1]] [1] "B; C; D; E; F"

[[2]] [1] "B; C"

[[3]] [1] "B; C; D"

[[4]] [1] "B; C; D"

[[5 ]] [1] "B; C; D; E"

Also brauche ich eine Funktion auf diese Weise anwenden:

list2 <- lapply(list1, 
       function(x) { 
        #something here 
       }) 

Es wäre genial, wenn die Funktion leicht eine andere Subelement auszulassen modifiziert werden könnte (und nicht nur die erste, sondern die dritte oder die letzte oder die zweite bis letzte ...).

Vielen Dank!

Antwort

4

Lässt ein reproduzierbares Beispiel machen:

> L = list(LETTERS[1:6], LETTERS[1:3],LETTERS[1:4],LETTERS[1:4],LETTERS[1:5]) 
> L 
[[1]] 
[1] "A" "B" "C" "D" "E" "F" 

[[2]] 
[1] "A" "B" "C" 

[[3]] 
[1] "A" "B" "C" "D" 

[[4]] 
[1] "A" "B" "C" "D" 

[[5]] 
[1] "A" "B" "C" "D" "E" 

Dann fallen Sie das erste Element und alles fügen auch zusammen mit einem Semikolon:

> lapply(L, function(x){paste(x[-1],collapse=";")}) 
[[1]] 
[1] "B;C;D;E;F" 

[[2]] 
[1] "B;C" 

[[3]] 
[1] "B;C;D" 

[[4]] 
[1] "B;C;D" 

[[5]] 
[1] "B;C;D;E" 

Sie erhalten einen leeren String (keine Semikolons) wenn zu Beginn nur ein Element im Listenelement vorhanden ist.

Lesen Sie über R-Vektor-Indizierung, um die Auswahl anderer Elemente des Vektors x in der Funktion zu tun.

+0

Okay! Genau das habe ich jetzt versucht! was ist, wenn ich das letzte Element auslassen möchte? – DaniCee

+2

@DaniCee schlagen vor, Sie lesen auf R-Vektor-Indexierung - kein Sinn, es hier zu wiederholen. – Spacedman

+0

@DaniCee Wenn die Antwort von Spacedman diejenige ist, die Ihr Problem löst, bitte akzeptieren Sie es anstelle des unvollständigen von Kota Mori aus zwei Gründen: (a) es signalisiert anderen SO-Benutzern, nach der richtigen Antwort zu suchen und (b) es sagt Danke an Spacedman und gleichzeitig "Trinkgeld" (Reputationspunkte) - Danke. – Uwe

1

[ ist eigentlich eine Funktion. Sie können das unten versuchen.

list1 <- list(
    c("A", "B", "C"), 
    c("D", "E", "F", "G") 
) 

# for leaving out the first element 
lapply(list1, `[`, -1) 


# for leaving out the last element 
lapply(list1, function(a) a[-length(a)]) 


# for leaving various elements 
Map(`[`, list1, -c(1, 2)) 
+1

Diese Antwort fügt den Vektor nicht zusammen mit Semikolon, wie gefragt. – Spacedman

+0

Aha, du hast Recht! diesen Punkt verpasst –

Verwandte Themen