2016-11-11 57 views
0

我有以下如何按組縮小此數據框?

t <- structure(list(name = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("Alice", "Bob", 
"Jane Doe", "John Doe"), class = "factor"), school = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("Alice School", 
"Bob School", "Someother School", "Someschool College"), class = "factor"), 
    group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("A", "B"), class = "factor"), 
    question = structure(c(2L, 4L, 6L, 8L, 1L, 3L, 5L, 7L, 2L, 
    4L, 6L, 8L, 1L, 3L, 5L, 7L, 2L, 4L, 6L, 8L, 1L, 3L, 5L, 7L, 
    2L, 4L, 6L, 8L, 1L, 3L, 5L, 7L), .Label = c("q1", "q2", "q3", 
    "q4", "q5", "q6", "q7", "q8"), class = "factor"), mark = c(0L, 
    0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 
    1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 
    1L), subject = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
    2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("C", "M"), class = "factor")), .Names = c("name", 
"school", "group", "question", "mark", "subject"), row.names = c(7L, 
15L, 23L, 31L, 3L, 11L, 19L, 27L, 8L, 16L, 24L, 32L, 4L, 12L, 
20L, 28L, 6L, 14L, 22L, 30L, 2L, 10L, 18L, 26L, 5L, 13L, 21L, 
29L, 1L, 9L, 17L, 25L), class = "data.frame") 

,我需要產生其中每個學生具有用於每個受試者一個組合標記的數據幀。這個組合只是每個問題上的標記總和。所以,例如,Jane Doe將在主題C上有3個,在主題M上有2個。我已經用Reduce和其他方法足夠長的時間來敲打我的頭。我可以用一種非常程序化的方式來解決這個問題,但是如果我可以用單線(或近似)來做到這一點,我會更開心。我敢肯定它可以做...

回答

5

你說過你的問題;要group_by學生,主題和計算總和

library(tidyverse) 
asdf %>% 
    group_by(name, subject) %>% 
    summarise(score = sum(mark)) 
+0

哈!我想'總結'從我腦海中滑落... – Morpheu5

4

這裏一個data.table解決方案:

library(data.table) 
setDT(t)[, sum(mark), by = list(name, subject)] 
3

和公正的完整性,基礎R:

aggregate(mark ~ name + subject, data=t, sum) 

這是說「彙總響應變量mark由分組變量namesubject,使用sum a是聚合功能「。