2017-01-18 3 views
2

나머지 요약 통계가 각 그룹의 열 값 차이가되도록 그룹 전체에 여러 열을 축소하려고합니다. 두 가지 방법이 있지만 나는이 일을해야한다는 더 좋은 방법이 있다는 느낌을 가지고 있습니다.dplyr을 사용하는 그룹 간의 차이를 기반으로하는 열 축소

test %>% 
    gather(key,val,val:val2) %>% 
    spread(id,val) %>% 
    mutate(B.less.A = B - A) %>% 
    select(-c(A,B)) %>% 
    spread(key,B.less.A) 

tidyr summarize_each 방법을 사용하여

예 데이터 summarize_each

test %>% 
    group_by(year) %>% 
    summarize_each(funs(.[id == "B"] - .[id == "A"]), val, val2) 

를 사용

library(dplyr) 
library(tidyr) 

test <- data.frame(year = rep(2010:2011, each = 2), 
       id = c("A","B"), 
       val = 1:4, 
       val2 = 2:5, 
       stringsAsFactors = F) 

는 비교적 간단한데하지만 난 그룹화하여이 작업을 수행 할 수있는 방법이 느낌 어떻게 든 이드는? 열의 NA 값을 무시할 수있는 방법이 있습니까?

+3

'테스트 %> % GROUP_BY (년) %> % summarise_at (바르 (-id), 차이)'를 사용할 수 있습니까? 나는 네가 원하는 것을 확신하지 못한다. 2 회 미만의 통화로 처리하기가 어려울 것입니다. – alistaire

+3

@alistaire, 모든 그룹이 항상'id'에 의해 똑같은 방식으로 정렬되도록하기 위해서'(id)'배열을 원할 수도 있습니다. – eipi10

+0

사실, 데이터가 취할 수있는 가능한 조치가 확실하지 않습니다. 순서가 잘못되었거나'year'와'id'에 둘 이상의 행이 있거나 다른'id'가있는 경우 더 많은 정리가 순서대로 이루어집니다. – alistaire

답변

0

우리는 data.table

library(data.table) 
setDT(test)[, lapply(.SD, diff), by = year, .SDcols = val:val2] 
# year val val2 
#1: 2010 1 1 
#2: 2011 1 1