2010-07-13 3 views
4

문제는 벡터 집합입니다. 각 벡터는 센서 판독 값을 갖지만 길이가 다릅니다. 이 벡터들 각각에 대해 동일한 기술적 통계를 계산하고 싶습니다. 내 질문은, 내가 그들을 R에 저장해야합니다. c()을 사용하여 벡터를 연결합니다. list()을 사용하면 mean()과 같은 기능이 잘못 작동하는 것으로 보입니다. 데이터 프레임이 올바른 객체입니까?다른 크기의 벡터 집합에 대한 설명 통계를 계산하는 방법

크기가 다른 경우 벡터에 동일한 기능을 적용하는 가장 좋은 방법은 무엇입니까? 데이터가 SQL 서버에 상주한다고 가정하면 어떻게 가져와야합니까?

답변

7

크기가 다른 벡터를 목록으로 결합해야합니다. data.frame은 각 열의 길이가 같을 것으로 예상합니다.

lapply을 사용하여 데이터를 가져옵니다. 그런 다음 lapply을 다시 사용하여 설명적인 통계를 얻으십시오.

x <- lapply(ids, sqlfunction) 
stats <- lapply(x, summary) 

여기에서 sqlfunction은 데이터베이스 쿼리를 위해 만든 함수입니다. 당신은 do.call(rbind, stats)를 호출하거나 plyr를 사용하여 data.frame에 stats 목록을 축소 할 수 있습니다 :

library(plyr) 
x <- llply(ids, sqlfunction) 
stats <- ldply(x, summary) 
+0

셰인은 무엇입니까? "<~" –

+0

니스'찾고 <-' ;-) – mbq

+0

DF 년대는 같은 길이의 열이 있지만 그 의미하지는 않습니다 당신이 그들로 길이가 다른 아닌 그룹 벡터해야한다. 그것들은리스트가 할 수있는 것보다 개별 벡터에 더 많은 의미를 부여 할 수있게 해줍니다. – John

1

"무슨 크기가 다른 경우 벡터에 동일한 기능을 적용하여 데이터를 치죠위한 가장 좋은 방법 인 SQL에있는 서버를 가져 오는 방법은 무엇입니까? "

셰인 (Shane)이 제안한대로, 여기에 선택의 여지가 있습니다. 물론 사용자 정의 기능과 함께 사용할 수도 있습니다. 요약 정보가 충분한 정보를 제공하지 않는다고 생각되는 경우에 대비하십시오.

SQL 부분 : 대부분의 관계형 DBMS에는 RPostgreSQL, RMySQL, ROracle과 같은 패키지가 있으며 일반적으로 RODBC가 있습니다. MS SQL 서버에 대해 말하면 특정 패키지가 있는지 확실하지 않지만 RODBC가 작업을 수행해야합니다. MS SQL 서버와 결혼했는지는 모르겠지만 R-RMy 용 로컬 데이터베이스를 실행할 수있는 옵션이 있다면 설치하기가 정말 쉽습니다.

일반적으로 데이터베이스 패키지를 사용하면 테이블을 R data.frame으로 변환하는 dbListTable 또는 dbReadTable과 같은 래퍼를 사용합니다.

데이터를 실제로 가져 오려면 데이터베이스의 .csv 내보내기를 사용하고 필요에 따라 read.table 또는 read.csv를 사용할 수 있습니다. 하지만 데이터베이스에 직접 연결하는 것이 좋습니다. 이전에는 해본 적이 없지만 더 재미있을지라도 그리 어렵지 않습니다.

편집 : 나는 MS를 사용하지는하지만, 어쩌면 mailing list post

+1

이제 특정 MS SQL 서버가있다. – agstudy

+0

매우 감사합니다 agstudy. –

1

내가 데이터 프레임이 아닌 목록에이를 가져올 경향이 있습니다 전에 다른 사람이 일을. 각 개별 벡터는 하나 이상의 의미있는 변수로 구분됩니다. 데이터가 수집 된 시간과 수집 된 시간을 추적하고 싶다고 가정 해 봅시다. 데이터 프레임에는 모든 벡터가 함께 연결된 하나의 열이 있지만 시간 및 위치 열의 값으로 각각 구별됩니다. 각 개별 벡터의 의미를 얻으려면 tapply()가 선택 도구 일 수 있습니다.

tapply(df$y, list(df$time, df$location), mean) 

또는 변수 수 및 향후 필요에 따라 aggregate()가 더 나을 수도 있습니다.다른 사람의 숫자 값을 하나의 열 및 그룹화 또는 공변량 값 :

2

대부분의 플로팅 및 회귀 기능은 데이터가 "긴"형식이 될 것으로 기대합니다. 스택 기능은 불규칙한 길이 목록을 받아 들일 것, 그리고 tapply 또는 집계 함수는 불규칙한 길이 카테고리 변수를 통해 작업 할 수 있습니다 :

dlist <- list(a=1:2, b=13:15, cc= 5:1) 
s.dfrm <- stack(dlist) 
s.dfrm 
    values ind 
1  1 a 
2  2 a 
3  13 b 
4  14 b 
5  15 b 
6  5 cc 
7  4 cc 
8  3 cc 
9  2 cc 
10  1 cc 
tapply(s.dfrm$values, s.dfrm$ind, mean) 
    a b cc 
1.5 14.0 3.0 
관련 문제