빈 행으로 데이터 프레임 분할

Piabenaud

나는 Loc_1, Loc_2, Loc_3과 같은 블록 사이의 NA 행을 기반으로 끔찍하게 형식이 지정된 데이터 프레임을 데이터 프레임 목록으로 분할하려고합니다. 나는 시도했습니다 빈 행을 기반으로 R에 분할 dataframes을 하고 빈 행과 헤더 제목에 따라 여러 DFS에 분할 또는 분할 dataframe 행운과 함께. 내 경우의 차이점은 각각의 새로운 청크가 처음 두 열의 두 행에 대한 NA로 시작하고 전체에 흩어져있는 많은 NA가 있기 때문에 NA 값이없는 단일 열이 없다는 것입니다. 어떤 아이디어? 이것은 나의 첫 번째 게시물이므로 더 많은 정보를 게시하려면 외쳐주세요!

df <- data.frame(
  a = c(NA, NA, "Loc_1", "Loc_1", "Loc_1", NA, NA, NA, "Loc_2", "Loc_2", "Loc_2", NA, NA, NA, "Loc_3", "Loc_3", "Loc_3"),
  b = c(NA, NA, "25:11:2020", "26:11:2020", "27:11:2020", NA, NA, NA, "25:11:2020", "26:11:2020", "27:11:2020",NA, NA, NA, "25:11:2020", "26:11:2020", "27:11:2020"),
  c = c("Var1", "Unit/1", 1:3, NA, "Var3", "Unit/3", NA, 1, 2, NA,"Var1", "Unit/1", 1:3),
  d = c("Var2", "Unit/2", NA, NA, 1, NA, "Var1", "Unit/1", NA, NA, 1, NA, "Var3", "Unit/3", NA, NA, 1)
)
       a          b      c      d
1   <NA>       <NA>   Var1   Var2
2   <NA>       <NA> Unit/1 Unit/2
3  Loc_1 25:11:2020      1   <NA>
4  Loc_1 26:11:2020      2   <NA>
5  Loc_1 27:11:2020      3      1
6   <NA>       <NA>   <NA>   <NA>
7   <NA>       <NA>   Var3   Var1
8   <NA>       <NA> Unit/3 Unit/1
9  Loc_2 25:11:2020   <NA>   <NA>
10 Loc_2 26:11:2020      1   <NA>
11 Loc_2 27:11:2020      2      1
12  <NA>       <NA>   <NA>   <NA>
13  <NA>       <NA>   Var1   Var3
14  <NA>       <NA> Unit/1 Unit/3
15 Loc_3 25:11:2020      1   <NA>
16 Loc_3 26:11:2020      2   <NA>
17 Loc_3 27:11:2020      3      1
에도

이 Base R 솔루션은 어떻습니까?

n <- rowSums(is.na(df)) == ncol(df)
cs <- cumsum(n) + 1
s <- split(df[!n, ], cs[!n])

s

#> $`1`
#>       a          b      c      d
#> 1  <NA>       <NA>   Var1   Var2
#> 2  <NA>       <NA> Unit/1 Unit/2
#> 3 Loc_1 25:11:2020      1   <NA>
#> 4 Loc_1 26:11:2020      2   <NA>
#> 5 Loc_1 27:11:2020      3      1
#> 
#> $`2`
#>        a          b      c      d
#> 7   <NA>       <NA>   Var3   Var1
#> 8   <NA>       <NA> Unit/3 Unit/1
#> 9  Loc_2 25:11:2020   <NA>   <NA>
#> 10 Loc_2 26:11:2020      1   <NA>
#> 11 Loc_2 27:11:2020      2      1
#> 
#> $`3`
#>        a          b      c      d
#> 13  <NA>       <NA>   Var1   Var3
#> 14  <NA>       <NA> Unit/1 Unit/3
#> 15 Loc_3 25:11:2020      1   <NA>
#> 16 Loc_3 26:11:2020      2   <NA>
#> 17 Loc_3 27:11:2020      3      1

다음과 같이 긴 형식으로 모든 데이터를 깔끔하게 다시 설정할 수 있습니다 unpivotr.

library(unpivotr)
library(dplyr)
library(purrr)

map_dfr(s, 
        ~ as_cells(.x) %>% 
         behead("up", "var") %>% 
         behead("up", "uom") %>% 
         behead("left", "loc") %>% 
         behead("left", "date") %>% 
         # filter(!is.na(chr)) %>%  # do you need the NAs?
         mutate(value = as.numeric(chr)) %>% 
         select(var, uom, loc, date, value),
        .id = "df")

#> # A tibble: 18 x 6
#>    df    var   uom    loc   date       value
#>    <chr> <chr> <chr>  <chr> <chr>      <dbl>
#>  1 1     Var1  Unit/1 Loc_1 25:11:2020     1
#>  2 1     Var1  Unit/1 Loc_1 26:11:2020     2
#>  3 1     Var1  Unit/1 Loc_1 27:11:2020     3
#>  4 1     Var2  Unit/2 Loc_1 25:11:2020    NA
#>  5 1     Var2  Unit/2 Loc_1 26:11:2020    NA
#>  6 1     Var2  Unit/2 Loc_1 27:11:2020     1
#>  7 2     Var3  Unit/3 Loc_2 25:11:2020    NA
#>  8 2     Var3  Unit/3 Loc_2 26:11:2020     1
#>  9 2     Var3  Unit/3 Loc_2 27:11:2020     2
#> 10 2     Var1  Unit/1 Loc_2 25:11:2020    NA
#> 11 2     Var1  Unit/1 Loc_2 26:11:2020    NA
#> 12 2     Var1  Unit/1 Loc_2 27:11:2020     1
#> 13 3     Var1  Unit/1 Loc_3 25:11:2020     1
#> 14 3     Var1  Unit/1 Loc_3 26:11:2020     2
#> 15 3     Var1  Unit/1 Loc_3 27:11:2020     3
#> 16 3     Var3  Unit/3 Loc_3 25:11:2020    NA
#> 17 3     Var3  Unit/3 Loc_3 26:11:2020    NA
#> 18 3     Var3  Unit/3 Loc_3 27:11:2020     1

끝에 하나의 고유 한 데이터 프레임을 원하지 않는 경우 map대신 사용 map_dfr하고 제거하십시오., .id = "df"

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 벡터를 기반으로 데이터 프레임을 빈으로 분할

분류에서Dev

데이터 프레임에서 동적으로 행 분할

분류에서Dev

csv 파일에서 여러 데이터 프레임을 결합하여 각각을 빈 행으로 분리

분류에서Dev

빈 데이터 프레임 내의 모든 위치가 채워질 때까지 한 데이터 프레임의 행을 다양한 행의 빈 데이터 프레임에 순차적으로 할당합니다.

분류에서Dev

Python : 가끔 빈 행이있는 각 행의 팬더 데이터 프레임 분할 문자열

분류에서Dev

데이터를 3 열 데이터 프레임으로 분할

분류에서Dev

데이터 프레임을 행 번호별로 데이터 프레임 목록으로 분할

분류에서Dev

데이터 프레임을 1 행 데이터 프레임 목록으로 분할

분류에서Dev

원래 데이터 프레임의 총 행 수를 기준으로 데이터 프레임을 두 데이터 프레임으로 분할하는 방법

분류에서Dev

R 데이터 프레임에서 행 값을 여러 행으로 분할

분류에서Dev

R은 데이터 프레임의 각 행을 두 행으로 분할

분류에서Dev

데이터 프레임에서 빈 행을 삭제할 수 없습니다.

분류에서Dev

R : 데이터 프레임을 열로 분할하고 행으로 재결합

분류에서Dev

행 값의 빈도를 기준으로 데이터 프레임 필터링

분류에서Dev

r의 특정 행으로 데이터 프레임을 분할하는 방법

분류에서Dev

Spark 데이터 프레임의 열을 새 행으로 분할 [Scala]

분류에서Dev

공통 행을 동적으로 사용하여 데이터 프레임 분할

분류에서Dev

테이블을 여러 데이터 프레임으로 분할

분류에서Dev

데이터 프레임을 열 값으로 두 개로 분할

분류에서Dev

각 행의 NA 수로 데이터 프레임 분할

분류에서Dev

R : 연결된 데이터 프레임을 행별로 분할

분류에서Dev

R : 데이터 프레임에 열 이름으로 행 할당

분류에서Dev

문자열을 기반으로 데이터 프레임 분할

분류에서Dev

조건부 간격으로 데이터 프레임 분할

분류에서Dev

일부 조건으로 데이터 프레임 분할

분류에서Dev

열 값을 기준으로 데이터 프레임 분할

분류에서Dev

열 값으로 데이터 프레임 분할 Scala

분류에서Dev

\를 기준으로 데이터 프레임 문자열 분할

분류에서Dev

데이터 프레임을 두 그룹으로 분할

Related 관련 기사

  1. 1

    다른 벡터를 기반으로 데이터 프레임을 빈으로 분할

  2. 2

    데이터 프레임에서 동적으로 행 분할

  3. 3

    csv 파일에서 여러 데이터 프레임을 결합하여 각각을 빈 행으로 분리

  4. 4

    빈 데이터 프레임 내의 모든 위치가 채워질 때까지 한 데이터 프레임의 행을 다양한 행의 빈 데이터 프레임에 순차적으로 할당합니다.

  5. 5

    Python : 가끔 빈 행이있는 각 행의 팬더 데이터 프레임 분할 문자열

  6. 6

    데이터를 3 열 데이터 프레임으로 분할

  7. 7

    데이터 프레임을 행 번호별로 데이터 프레임 목록으로 분할

  8. 8

    데이터 프레임을 1 행 데이터 프레임 목록으로 분할

  9. 9

    원래 데이터 프레임의 총 행 수를 기준으로 데이터 프레임을 두 데이터 프레임으로 분할하는 방법

  10. 10

    R 데이터 프레임에서 행 값을 여러 행으로 분할

  11. 11

    R은 데이터 프레임의 각 행을 두 행으로 분할

  12. 12

    데이터 프레임에서 빈 행을 삭제할 수 없습니다.

  13. 13

    R : 데이터 프레임을 열로 분할하고 행으로 재결합

  14. 14

    행 값의 빈도를 기준으로 데이터 프레임 필터링

  15. 15

    r의 특정 행으로 데이터 프레임을 분할하는 방법

  16. 16

    Spark 데이터 프레임의 열을 새 행으로 분할 [Scala]

  17. 17

    공통 행을 동적으로 사용하여 데이터 프레임 분할

  18. 18

    테이블을 여러 데이터 프레임으로 분할

  19. 19

    데이터 프레임을 열 값으로 두 개로 분할

  20. 20

    각 행의 NA 수로 데이터 프레임 분할

  21. 21

    R : 연결된 데이터 프레임을 행별로 분할

  22. 22

    R : 데이터 프레임에 열 이름으로 행 할당

  23. 23

    문자열을 기반으로 데이터 프레임 분할

  24. 24

    조건부 간격으로 데이터 프레임 분할

  25. 25

    일부 조건으로 데이터 프레임 분할

  26. 26

    열 값을 기준으로 데이터 프레임 분할

  27. 27

    열 값으로 데이터 프레임 분할 Scala

  28. 28

    \를 기준으로 데이터 프레임 문자열 분할

  29. 29

    데이터 프레임을 두 그룹으로 분할

뜨겁다태그

보관