2017-04-13 3 views
0

그룹 내 각 변수의 최대 값 (모두 20 개)을 계산하려면 직선을 사용하는 대신 계산을 수행하는 더 쉬운 방법이 있는지 궁금합니다. summarisegroup_bydplyr에 사용하여 모든 방법을 나열 하시겠습니까? 샘플 데이터는 다음과 같습니다 : 테스트의 다른 유형에 대한그룹 계산 내 변수 목록 참조

Name Year test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 test20 
John 2008 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 
John 2008 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 
John 2009 0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 
John 2010 0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 0 1 0 0 1 
John 2010 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 1 1 
John 2010 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 
John 2011 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 
John 2011 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
John 2012 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 
John 2012 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 
John 2012 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 1 
John 2013 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 
Mary 2009 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
Mary 2010 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
Mary 2010 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 
Mary 2011 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 
Mary 2011 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 
Mary 2011 0 0 1 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 
Mary 2011 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 
Mary 2012 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 
Mary 2012 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 
Mary 2013 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
Mary 2013 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
Jack 2010 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 
Jack 2010 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 
Jack 2011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 
Jack 2011 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 
Jack 2011 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 
Jack 2011 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 
Jack 2012 0 0 1 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 
Jack 2012 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
Jack 2013 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 
Jack 2013 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 
Jack 2014 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
Jack 2015 0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 0 1 0 0 1 
Jack 2015 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 1 1 
Jack 2015 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 

test1test20을 통해 스탠드, 사람에 대한 1 스탠드 0,이 시험에 소요 그 의미/그녀는하지 않습니다. 사람은 가능한 한 여러 번 시험을 볼 수 있습니다. 이 사람이 그 해에 각 시험을 치른 적이 있는지 여부를 보여주는 person-year 레벨 집계를 갖고 싶습니다. 위에서 설명한 것처럼 maxperson-year 레벨로 계산하는 쉬운 방법이 있다면 20 가지 테스트를 모두 수행 할 수 있습니까? 나는 ddply을 사용하려고 생각하고 있지만 더 좋은 접근 방법이 있다면 여전히 고심하고 있습니다.

미리 감사드립니다.

답변

2

tidyr의 추가 여기에 도움이 될 것입니다 :

# highlighting your data above 
dat <- read.table("clipboard", header = TRUE, stringsAsFactors = FALSE) 

library(dplyr) 
library(tidyr) 

dat %>% 
    gather(test, tookit, -Name, -Year) %>% 
    group_by(Name, Year, test) %>% 
    summarize(times = sum(tookit)) %>% 
    ungroup() 
# # A tibble: 340 × 4 
#  Name Year test times 
# <chr> <int> <chr> <int> 
# 1 Jack 2010 test1  0 
# 2 Jack 2010 test10  1 
# 3 Jack 2010 test11  1 
# 4 Jack 2010 test12  0 
# 5 Jack 2010 test13  0 
# 6 Jack 2010 test14  1 
# 7 Jack 2010 test15  2 
# 8 Jack 2010 test16  0 
# 9 Jack 2010 test17  0 
# 10 Jack 2010 test18  0 
# # ... with 330 more rows 

이것은 당신이 그들이 매년 각 테스트를 찍은 얼마나 많은 시간을 알려줍니다. (tidyr없이)

또 다른 방법 :

dat %>% 
    group_by(Name, Year) %>% 
    summarize_at(starts_with("test", vars=colnames(.)), sum) %>% 
    ungroup() 
# A tibble: 17 × 22 
#  Name Year test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 
# <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> 
# 1 Jack 2010  0  0  0  0  1  0  0  0  0  1 
# 2 Jack 2011  0  1  0  0  1  1  0  0  1  1 
# 3 Jack 2012  0  0  1  1  0  0  0  0  1  1 
# 4 Jack 2013  1  0  0  0  0  1  0  0  0  0 
# 5 Jack 2014  0  0  0  0  0  0  0  0  0  0 
# 6 Jack 2015  0  0  0  1  0  1  1  1  1  0 
# 7 John 2008  2  0  1  0  0  1  0  0  0  1 
# 8 John 2009  0  1  1  0  0  0  1  0  1  0 
# 9 John 2010  0  0  0  1  0  1  1  1  1  0 
# 10 John 2011  0  0  0  1  2  0  1  1  0  1 
# 11 John 2012  0  0  1  1  0  0  2  1  1  0 
# 12 John 2013  0  0  1  0  0  0  0  0  0  0 
# 13 Mary 2009  0  0  1  0  1  0  0  0  0  0 
# 14 Mary 2010  0  0  0  0  1  0  1  0  0  1 
# 15 Mary 2011  0  1  1  1  0  0  1  1  1  1 
# 16 Mary 2012  0  0  0  0  1  1  0  1  0  1 
# 17 Mary 2013  0  0  0  1  0  0  1  1  0  0 
# # ... with 10 more variables: test11 <int>, test12 <int>, test13 <int>, 
# # test14 <int>, test15 <int>, test16 <int>, test17 <int>, test18 <int>, 
# # test19 <int>, test20 <int> 
+0

안녕 에반, 빠른 도움을 주셔서 감사합니다. 각 변수의 최대 값을 얻는 것처럼 패널을 유지하고 싶었지만이 방법을 사용할 수 있습니까? 최고, – Anne

+0

물론,'%> % spread (test, times)'를 추가 하시겠습니까? – r2evans