2017-09-06 3 views
0

저는 R을 사용하여 ~ 100,000 행의 CSV 파일을 분석합니다. 어떤 도움을 주시면 감사하겠습니다. 나는 그룹 열의 각 값이 정확히 3 번 반복 할데이터 프레임에 행을 추가하여 각 고유 값이 정확히 n 번 반복됩니까?

Row1 -> Group, Position, Frequency 
Row2 -> 192, 1, 0.2 
Row3 -> 192, 2, 0.3 
Row4 -> 192, 3, 0.1 
Row5 -> 193, 4, 0.5 
Row6 -> 193, 5, 0.6 
Row7 -> 194, 6, 0.2 
Row8 -> 194, 7, 0.4 
Row9 -> 195, 8, 0.9 
Row10 -> 196, 9, 0.8 

:

내 테이블입니다. 192는 세 번 반복되지만 194와 196은 한 번만 발생합니다. 그룹 열에 값이 세 번 반복되지 않으면 행을 추가하여 총 세 번의 반복을 만들고 그 행의 다른 열에있는 셀을 비워 두는 행을 추가하려고합니다 (또는 NA). 그래서 최종 결과는 다음과 같습니다

Row1 -> Group, Position, Frequency 
Row2 -> 192, 1, 0.2 
Row3 -> 192, 2, 0.3 
Row4 -> 192, 3, 0.1 
Row5 -> 193, 4, 0.5 
Row6 -> 193, 5, 0.6 
Row7 -> 193, NA, NA 
Row8 -> 194, 6, 0.2 
Row9 -> 194, 7, 0.4 
Row10-> 194, NA, NA 
Row11 -> 195, 8, 0.9 
Row12 -> 195, NA, NA 
Row13 -> 195, NA, NA 
Row14 -> 196, 9, 0.8 
Row15 -> 196, NA, NA 
Row16 -> 196, NA, NA 

답변

1
do.call(rbind, lapply(split(df, df$Group), function(a){ 
     data.frame(Group = rep(a$Group[1], 3), 
        Position= a$Position[1:3], 
        Frequency = a$Frequency[1:3]) 
})) 
#  Group Position Frequency 
#192.1 192  1  0.2 
#192.2 192  2  0.3 
#192.3 192  3  0.1 
#193.1 193  4  0.5 
#193.2 193  5  0.6 
#193.3 193  NA  NA 
#194.1 194  6  0.2 
#194.2 194  7  0.4 
#194.3 194  NA  NA 
#195.1 195  8  0.9 
#195.2 195  NA  NA 
#195.3 195  NA  NA 
#196.1 196  9  0.8 
#196.2 196  NA  NA 
#196.3 196  NA  NA 

데이터

df = structure(list(Group = c(192L, 192L, 192L, 193L, 193L, 194L, 
194L, 195L, 196L), Position = 1:9, Frequency = c(0.2, 0.3, 0.1, 
0.5, 0.6, 0.2, 0.4, 0.9, 0.8)), .Names = c("Group", "Position", 
"Frequency"), class = "data.frame", row.names = c(NA, -9L)) 
+0

감사를 너 너무 많이! –

2

을 tidyverse, 당신은 행의 실종 조합을 추가 tidyr::complete를 사용할 수 있습니다

library(tidyverse) 

df <- data_frame(Row = c("Row2", "Row3", "Row4", "Row5", "Row6", "Row7", "Row8", "Row9", "Row10"), 
       Group = c(192, 192, 192, 193, 193, 194, 194, 195, 196), 
       Position = 1:9, 
       Frequency = c(0.2, 0.3, 0.1, 0.5, 0.6, 0.2, 0.4, 0.9, 0.8)) 

df_filled <- df %>% 
    group_by(Group) %>% 
    mutate(i = row_number()) %>% 
    complete(i = 1:3) 

df_filled 
#> # A tibble: 15 x 5 
#> # Groups: Group [5] 
#> Group  i Row Position Frequency 
#> <dbl> <int> <chr> <int>  <dbl> 
#> 1 192  1 Row2  1  0.2 
#> 2 192  2 Row3  2  0.3 
#> 3 192  3 Row4  3  0.1 
#> 4 193  1 Row5  4  0.5 
#> 5 193  2 Row6  5  0.6 
#> 6 193  3 <NA>  NA  NA 
#> 7 194  1 Row7  6  0.2 
#> 8 194  2 Row8  7  0.4 
#> 9 194  3 <NA>  NA  NA 
#> 10 195  1 Row9  8  0.9 
#> 11 195  2 <NA>  NA  NA 
#> 12 195  3 <NA>  NA  NA 
#> 13 196  1 Row10  9  0.8 
#> 14 196  2 <NA>  NA  NA 
#> 15 196  3 <NA>  NA  NA 
+0

간단하고 우아한 – PoGibas

+0

정말 고마워요 !! 이것은 매우 도움이되었다 :-) –

관련 문제