2014-09-19 5 views
3

개별 단위로 분할하려는 대용량 데이터 집합이 있습니다. 현재이 단위 장벽에는 NA로 표시되어 있지만 분할하는 방법은 무엇입니까? 샘플 세트 :NA에서 R의 단일 열 데이터 프레임 분할

df=matrix(c(1,2,3,4,NA,6,7,8,NA,10,11,12),ncol=1,byrow=TRUE) 

a 
     [,1] 
[1,] 1 
[2,] 2 
[3,] 3 
[4,] 4 
b 
     [,1] 
[1,] 6 
[2,] 7 
[3,] 8 
c 
     [,1] 
[1,] 10 
[2,] 11 
[3,] 12 

이 메이크업 감각 않도록, 우리에게

 [,1] 
[1,] 1 
[2,] 2 
[3,] 3 
[4,] 4 
[5,] NA 
[6,] 6 
[7,] 7 
[8,] 8 
[9,] NA 
[10,] 10 
[11,] 11 
[12,] 12 

내가 별도의 변수에 저장이 세 싶습니다을 준다? 감사.

답변

1

"데이터 세트"로 실제 매트릭스 또는 data.frame을 의미하는지 확실하지 않았습니다. 여기에 data.frame 예제, 매트릭스 우리는 단지 우리가 NA 그래서 우리는 그룹으로 섹션을 나눌 수 있습니다 볼 때마다 시간을 계산하는 새로운 변수로 gg를 사용

df <- data.frame(a=c(1,2,3,4,NA,6,7,8,NA,10,11,12)) 
gg <- ifelse(is.na(df$a),NA, cumsum(is.na(df$a))) 
split(df, gg) 

유사하다. 또한 분할을 위해 NA 값을 유지합니다. 그리고 마지막으로 split()이 새로운 범주 형 변수로 우리가 원하는 것을합니다. 누락 된 값을 제거한 후 splitcumsum를 사용하여

$`0` 
    a 
1 1 
2 2 
3 3 
4 4 

$`1` 
    a 
6 6 
7 7 
8 8 

$`2` 
    a 
10 10 
11 11 
12 12 
+0

, 감사합니다! 이러한 결과를 다른 변수에 할당하려면 <- (split (df, gg) $ "0") 등이 적절합니까? 가장 효율적인 것은 아니지만 지금은 무엇을하는지 이해합니다. – eschultz

+0

당신이 정말로, 정말로 좋은 이유가 없다면 저는 그것들을 나누지 않을 것입니다. 이와 같은 명명 된 목록을 사용하면 많은 변수보다 쉽게 ​​작업 할 수 있습니다. 그러나, 만약 list2env (setNames (split, dg, gg), letters [0 : max (gg, na.rm = T) +1]), envir = globalenv() 어쩌면 직접. – MrFlick

2

한 줄 솔루션 :

이 대단한
split(df[!is.na(df)],cumsum(is.na(df))[!is.na(df)]) 
$`0` 
[1] 1 2 3 4 

$`1` 
[1] 6 7 8 

$`2` 
[1] 10 11 12 
관련 문제