2016-07-18 4 views
0

Ich habe eine Tabelle mit 2 Spalten, "name" und "grade". In Spalte "name" speichere ich Daten, die mehrfach repliziert werden können. Um das Problem zu denken, lassen Sie sich eine einfache kurze Tabelle wie die erstellen unter:So wählen Sie Zeilen nach Kriterien, die mit zwei Tabellen verbunden sind

list <- data.frame(c("Natalia", "Alex", "Adam", "Natalia", "Natalia", "Alex", "Natalia", "Adam"), c(5, 6, 5, 4, 5, 4, 3, 4)) 
colnames(list) <- c("name", "grade") 

Ich mag würde eine dataframe mit zwei Spalten bekommen - eine Liste der eindeutigen Daten aus der Spalte "name" in ersten und mit einer Summe von Noten für jeden Namen in der Sekunde. Die erste Spalte ich so erstellt:

n_occur <- data.frame(table(list$name)) 

und es funktioniert - ich habe eine Spalte mit eindeutigen Namen aus vorheriger Tabelle.
Leider habe ich keine Ahnung, wie Noten für jeden Namen zu zählen sind. Es ist mehr oder weniger wie Pseudocode unten, aber ich weiß nicht, Syntax gut, so dass es ein bisschen schwierig für mich ist.

sum(list$grades) where (list$names == n_occur$X1) 

Ich denke, dass ich irgendwie mit ausgewählten kombinieren Filter sollte, aber ich habe es nicht geschafft, das zu tun. Ich wäre sehr dankbar für Hilfe;)

+2

Dies ist, was Sie suchen? http://stackoverflow.com/questions/1660124/how-to-sum-a-variable-by-group – Gopala

Antwort

1

Ist das wonach Sie suchen;

library(dplyr) 
list%>% 
    group_by(name)%>% 
    summarise(sum(grade)) 
#Source: local data frame [3 x 2] 

#  name sum(grade) 
# (fctr)  (dbl) 
#1 Adam   9 
#2 Alex   10 
#3 Natalia   17 
+0

Danke! Ich habe noch eine Frage. Nehmen wir an, wir haben eine weitere Spalte, z. Anzahl der Wochen, in denen die Person die Note erhalten hat. Ich möchte Daten gruppieren, so dass ich für jede Person für jede Woche die Summe ihrer Noten habe. – Natalia

+0

Eigentlich bin ich dazu gekommen, also teile ich vielleicht die Lösung mit, wenn es jemand in Zukunft braucht. Zuerst änderte ich von Dataframe in data.table 'Bibliothek (data.table) dt <- setDT (Liste) [, durch = c (" Name "," Woche "," Grad ")] []' Und dann Ich habe .SD so verwendet: 'dt <- dt [, lapply (.SD, sum), von = c (" woche "," name ")]' was gab mir was ich brauchte;) – Natalia

Verwandte Themen