2017-03-11 1 views
0

해당 범주를 기반으로 데이터 집합에 함수를 적용하고 싶습니다. 나는 각 연도의 카르마 열에서 작업을 수행하고자하는이그룹 별 열에 함수 적용

pet year karma 
1 cat 1991  5 
2 cat 1992  4 
3 cat 1993  1 
4 cat 1994  1 
5 cat 1995  1 
6 dog 1991  6 
7 dog 1992  4 
8 dog 1993  3 
9 dog 1994  2 
10 dog 1995  6 

처럼 보이는 다음과 같은 데이터 프레임

pet <- c(rep("cat",5),rep("dog",5)) 
year <- c(rep(1991:1995,2)) 
karma <- c(5,4,1,1,1,6,4,3,2,6) 
df <- data.frame(pet,year,karma) 

을 감안할 때. 예를

calc <- function(d,c){(d*5+c*7)/12} 

를 들어,

ddply(df, .(year),summarize, sum(karma)) 

가 어떻게 나 자신을 작성한 함수에 적용 할 것이다 : 나는 같은 기능을 적용하고자한다면, 이것은 ddply 수행 할 수 있습니다 d은 각 연도의 개 카르마에 해당하는 값이고 c 고양이의 해당 카르마에 해당하는 값입니다.

이상적으로, 애완 동물 , 1 년 및 위 기능에 의해 계산 된 카르마 값으로이 데이터 프레임에 추가로 5 개의 항목을 추가하고 싶습니다. 그 일을하는 가장 좋은 방법은 무엇입니까?

답변

1

당신은 다양한 데이터 프레임을 만들기 위해 spread를 사용하여 다음 mutate 당신의 기능을 구현하기 위해 (이것은 사소한,하지만 난 정말 비슷한 질문이 시간을 찾을 수 있다면 정말 미안.)

library('tidyr') 
library('dplyr') 
df %>% 
spread(pet, karma, drop = FALSE) %>% 
mutate(karma = calc(dog, cat), pet = "both") %>% 
select(year, pet, karma) %>% 
rbind(df) 
+1

calc (개, 고양이)일까요? – bouncyball

+0

예! 좋은 캐치 @bouncyball 업데이트했습니다 – Lucy

+0

고마워요. 그건 완벽하게 작동합니다! – Arc