2017-06-23 4 views
1

Ich habe zwei Listen von Datenrahmen. Ich möchte einige Berechnungen auf der ersten Liste zu tun, und dann gelten die Ergebnisse der zweiten ListeR: eine berechnete Spalte zu einer Liste von Datenrahmen hinzufügen

# first list 
df1 <- data.frame(id=1:5, score=c(rep(1, 3), rep(0, 2))) 
df2 <- data.frame(id=1:5, score=c(rep(1, 4), rep(0, 1))) 
df1 
    id score 
1 1  1 
2 2  1 
3 3  1 
4 4  0 
5 5  0 

df2 
id score 
1 1  1 
2 2  1 
3 3  1 
4 4  1 
5 5  0 

list1 <- list(df1, df2) 

# second list 
df3 <- data.frame(id =1 :3) 
df4 <- data.frame(id =1 :4)  
list2 <- list(df3, df4) 

ich Noten für jeden der Datenrahmen in list1 berechnen:

scores <- sapply(list1, function(df) sum(select(df, score))/nrow(df)) 
scores 
[1] 0.6 0.8 

Jetzt will ich aktualisieren die Datenframes in Liste2 mit den Scores, um Folgendes zu erhalten: Das erste Ergebnis wird auf das erste Datenfeld und das zweite auf das zweite und so weiter angewendet. Dies aktualisiert die dfs innerhalb der Liste

df3 
    id score 
1 1 0.6 
2 2 0.6 
3 3 0.6 

df4 
    id score 
1 1 0.8 
2 2 0.8 
3 3 0.8 
4 4 0.8 

Ich habe versucht lapply auf list2 mit, ich bin statt 1 entlang der Linien von

list2 <- lapply(list2, function(df){ df$score <- 1; df}) 

Offensichtlich mit dem entsprechenden Wert von etwas zu denken, aber a) Ich kann es nicht erhalten, um die Datenrahmen df3 und df4 zu aktualisieren. b) Ich kann nicht sehen, wie man die berechneten Ergebnisse an die Funktion "platschen" übergibt

Hilfe geschätzt. TIA.

Antwort

1

Wir Map

Map(cbind, list2, score = scores) 
+0

Gute Trauer verwenden, das war einfach! Aber wie aktualisiere ich df3 und df4, außer etwas wie x <- Map (cbind, list2, score = scores); df3 <- x [[1]]; df4 <- x [[2]] – Garry

+0

@Garry Es ist besser, es in einer "Liste" zu behalten, anstatt Originalobjekte zu aktualisieren. Wenn du es aktualisieren willst, list2 <- Map (cbind, list2, score = scores); Namen (Liste2) <- c ("df3", "df4"); list2env (list2, .GlobalEnv) ' – akrun

+1

Vielen Dank. Schön! – Garry

Verwandte Themen