2013-09-26 2 views
1

t.test 함수를 사용하여 데이터 프레임에 저장된 값 그룹을 비교하고 싶습니다. 내 데이터 프레임에 두 개의 열, 즉 "그룹"과 "결과"및 40 개의 행이 있다고 가정 해 보겠습니다. "결과"열에는 비교할 값이 들어 있고 "그룹"열은 값이 나뉘는 그룹을 나타냅니다. 예를 들어 각각 10 개의 값으로 이루어진 4 개의 그룹 (a, b, c, d)이 있습니다.R : 데이터 프레임 또는 매트릭스에서 t.test 함수 사용

그룹 b에 속한 값 대 그룹 b에 속한 값만 테스트하려는 것을 어떻게 나타낼 수 있습니까?

또는 그룹 A에 속한 값을 벡터로 추출하여 간단하게 벡터를 비교할 수 있습니다 ("vecta"라고 부릅시다).

미리 감사드립니다. Seb

+3

에 오신 것을 환영합니다 스택 오버플로 할 수 있습니다. 몇 가지 샘플 데이터를 게시하면 누군가가 도움이되는 답변으로 얼마나 빨리 답장 할 수 있는지에 대해 매우 놀랄 것입니다. – A5C1D2H2I1M1N2O1R2T1

+0

[여기] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) 방금 Ananda가 말한 것을 이루기위한 힌트를 찾을 수 있습니다 –

답변

3

질문 : "그룹 a에 속한 값과 그룹 b에 속한 값을 테스트하고 싶다는 것을 어떻게 나타낼 수 있습니까?"

데이터 프레임이 df이라고 가정합니다. P

"다른 방법이있다 : 당신이 어떤 예제 데이터를 게시되지 않은으로

t.test(df$result[df$group=="a"], df$result[df$group=="b"]) 
# or 
with(df, t.test(result[group=="a"], result[group=="b"])) 
# or, fo rexample 
t.test(result~group, data=subset(df, group %in% c("a", "b"))) 

모든 방법이 작동해야하지만 검증되지 않은 있습니다 : 당신은 예를 들어 사용할 수 있습니다 t.test와 그룹 B와 그룹 A를 비교하려면 그룹 a에 속한 값을 벡터로 추출하는 간단한 방법 (벡터를 "vecta"라고 부름)으로 벡터를 비교할 수 있습니까? " t.test에 도움의 말에 상황에 맞는 예를 들어 있습니다

df$value[def$group=="a"] # result is a vector 
+0

고맙습니다. 정확히 내가 오늘 오후 내내 무엇을 찾고 있었는지 :) – user2617763

2

예 : 당신이있을 때

## Classical example: Student's sleep data 
plot(extra ~ group, data = sleep) 
## Traditional interface 
with(sleep, t.test(extra[group == 1], extra[group == 2])) 
## Formula interface 
t.test(extra ~ group, data = sleep) 

두 번째 형태 (수식 인터페이스)는 가장 쉬운 방법입니다 여러 떼; 당신은 당신이 그것을 할 수 4.

한 가지 방법이 그룹 표시등이 특정 값을받는 값 방식을 추출로

with(yourdata, t.test(result[group == "a"], result[group == "b"])) 

것 (의이 데이터 프레임이 yourdata라고 가정 해 봅시다) 그게 위의 도움말 (귀하의 경우 with(yourdata, result[group=="a"]) 경우에만 그룹에 대한 결과를 줄 것이다)의 첫 번째 양식에 주어집니다 않습니다.

+1

+1. 한 가지 제안 : NA 그룹 값을 가진 레코드를 선택하지 않으려면'=='대신''% in % '' '' '를 사용합니다. 예 :'group <- c ("a", "b", NA); 그룹 [그룹 == "a"]; 그룹 [그룹 % % in "a"]'. 이것은 그럴 것 같지 않은 시나리오이지만, 기본값으로'% in % '를 사용하면 오랜 세월 동안 두통을 피할 수있었습니다. –

+1

@MattParker +1 우수한 점입니다 (NAs가 여기의 예를 다치게하지는 않지만). '=='을 선호하는 나의 이유는 도움의 예제에서 정보를 사용하도록 장려하는 것이 었습니다. 그리고 그것은 어떻게 관련 예제가'? t.test'에서 어떻게 수행되었는지에 대한 것입니다 –

1

다음은 "at will"이 아니며 "group"변수의 모든 쌍을 자동으로 계산합니다.

mydf <- data.frame(
    group = rep(letters[1:4], each = 10), 
    result = c(1:10, 5:14, 11:20, 15:24) 
) 
mydf 

당신은에 t.test를 사용하는 각 그룹의 "쌍"을 만들 combn를 사용할 수 있습니다

는 여기에 몇 가지 샘플 데이터입니다.별도의 벡터를 추출로

combn(as.character(unique(mydf$group)), 2, 
     FUN = function(y) t.test(result ~ group, 
           mydf[mydf$group %in% y ,]), 
     simplify = FALSE) 

, 나는 벡터의 list이 더 편리 할 수있는 당신이 split를 사용할 수 있다고 생각합니다 :

x <- split(mydf$result, mydf$group) 
0
with(subset(df, group %in% c("a", "b")), 
    t.test(value ~ factor(group)) 
# 
# df - your data.frame 
#