2011-01-14 3 views
2

var1var2의 고유 한 조합으로 작업하고 싶습니다. 언급 한 바와 같이R - 고유 한 값 조합으로 계산

foo <- data.frame(var1= c(1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4), var2=c(1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 3, 3)) 

이의 unique(foo) 결과 : 독특한 조합을 바탕으로

 var1 var2 
1 1  1 
2 2  1 
3 2  2 
4 3  1 
5 3  2 
6 4  2 
7 4  3 

, 나는 var1 값의 발생 수와 각 var1 값의 var2의 합계를 얻는 방법 값. 출력은 다음과 같을 수 있습니다 :

 var1 n svar 
1  1  1 1 
2  2  2 3 
3  3  2 3 
4  4  2 5 

편집 : 확장 질문 변경 합 변수의 이름입니다. 내가 당신의 질문을 이해 바랍니다

+1

확장 답을 영업 이익은 길이를 찾고 있었기 때문에 내가 여기 답변의 차이를 생각하다 Q – Chase

답변

4

unique(foo) 당신이 여기 이후에 무엇을 제공해야합니다 : 풋은 물론 테이블입니다.

다른 집계 유형 작업 또는 tapply(), aggregate() 외의 기본 R 등가물에 대해서는 plyr 라이브러리를 조사하는 것이 좋습니다.

:

library(plyr) 
ddply(foo, .(var1), unique) 

참고하면 등과 같은 평균과 VAR2의 SD를 찾는 등의 기능, 임의의 수와 독특한 대체 할 수

이 운동에 대한 중복 있지만, 여기 당신이 plyr을 사용하는 방법은

ddply(foo, .(var1), summarise, mean = mean(var2), sd = sd(var2)) 

응답

지금 당신이 plyr()의 합법적 사용을 편집 할 수 있습니다. 우리는 위에서 배운 것을 촬영 :

x <- unique(foo) 

plyr과 결합 :

ddply(x, .(var1), summarise, n = length(var2), sum = sum(var2)) 

당신이 후에 무엇을 제공해야합니다.

2

, 시도 : 질문 편집 된

unique(foo) 

후 :

은 매우 간단하지만 너무 @Chase, 같은를 작성하지 않음 우아한 해결책은 다음과 같습니다 :

foo$var12 <- paste(foo$var1, foo$var2, sep='|')  # the two variables combined to one 
table(foo$var12)          # and showing its frequencies 

1|1 2|1 2|2 3|1 3|2 4|2 4|3 
    2 2 2 2 3 2 2 
1

대답은 당신이 상태보다 다른,하지만 난 당신의 대답을 신뢰보다 내 코드를 더 신뢰, 나는 변수 "합"이름의 죄를 저지하기 위해 자신을 가져올 수 없습니다

newfoo <- data.frame(
       var1=unique(foo$var1), 
       n = with(foo, tapply(var2, var1, length)), 
       svar = with(foo, tapply(var2, var1, sum))) 
newfoo 
# var1 n svar 
#1 1 2 2 
#2 2 4 6 
#3 3 5 8 
#4 4 4 10 

편집 : (처음 체이스 말해하려고 무슨 짓을했는지 파악하지 않았다.)

newfoo <- data.frame(
        var1=unique(unique(foo)$var1), 
        n = with(unique(foo), tapply(var2, var1, length)), 
        svar = with(unique(foo), tapply(var2, var1, sum))) 

> newfoo 
    var1 n svar 
1 1 1 1 
2 2 2 3 
3 3 2 3 
4 4 2 5 
+0

당신의 추적을 해결하기 위해 과 객체의 합 'uniqu e (foo)'는 원래 데이터 프레임이 아닙니다. 좋은 지적은 "열"이라는 이름입니다. – Chase

+0

그의 코드에있는 "foo"가 그의 표 프레젠테이션에서 "foo"와 다르기 때문에 나는 생각한다. 코드 벡터에는 "2"가 4 개 있지만 2 "2"를 계산합니다. –

+0

첫 번째 표 프레젠테이션은'foo'가 아니라'unique (foo)'입니다. 아래 테이블의 카운트도'unique (foo)'를 사용합니다. – lecodesportif