누락 된 값이있는 이전 행의 변경 감지-for 루프 속도 향상-R

Ceefel

결 측값을 포함한 값이있는 데이터 세트가 있습니다. 목표는 change마지막 이전 유효 값에서 변경된 것을 나타내는 벡터를 만드는 것 입니다.

다음은 몇 가지 데이터입니다.

test <- data.frame(resp = c(9, NA, NA, 11, NA, NA, 6, 16, NA, 12, 0, 0, 0, 0, 0, NA, 0, 11, NA, NA, NA, NA, NA, NA, 14, NA, 23, NA, NA, 16, 16))

아이디어는 다음과 같습니다.

  • 값을 변경하지 않으면 0
  • 값> 1각 증가에 대한 마지막 이전 유효 값 추가 (예 : 1, 2, 3)
  • 가치 <마지막 이전 유효한 값의 결과 -1-1이전의 경우 이미 부정적이었다.

따라서 위의 데이터에 대한 결과는 다음과 같습니다.

    resp change
1      9      0
2     NA     NA
3     NA     NA
4     11      1
5     NA     NA
6     NA     NA
7      6     -1
8     16      1
9     NA     NA
10    12     -1
11     0     -2
12     0      0
13     0      0
14     0      0
15     0      0
16    NA     NA
17     0      0
18    11      1
19    NA     NA
20    NA     NA
21    NA     NA
22    NA     NA
23    NA     NA
24    NA     NA
25    14      2

나는 for 루프를 시도했고 어떻게 든 작동하지만 이것이 지저분한 코드라고 느끼고 매우 느립니다. 이 작업에 대한 더 나은 솔루션에 대한 아이디어가 있습니까 (예 : purrr)?

    for (i in 2:nrow(test)) {
  test$change[i] <- 0
  test$change[i] <- case_when(
    test$resp[i] > last(test$resp[which(!is.na(test$resp[1:i-1]))]) & last(test$change[which(!is.na(test$resp[2:i-1]))]) >= 0  ~ test$change[i] + last(test$change[which(!is.na(test$resp[1:i-1]))]) + 1,
    test$resp[i] > last(test$resp[which(!is.na(test$resp[1:i-1]))]) & last(test$change[which(!is.na(test$resp[2:i-1]))]) <= 0  ~ test$change[i] + 1,
    test$resp[i] < last(test$resp[which(!is.na(test$resp[1:i-1]))]) & last(test$change[which(!is.na(test$resp[2:i-1]))]) <= 0  ~ test$change[i] + last(test$change[which(!is.na(test$resp[1:i-1]))]) - 1,
    test$resp[i] < last(test$resp[which(!is.na(test$resp[1:i-1]))]) & last(test$change[which(!is.na(test$resp[2:i-1]))]) >= 0  ~ test$change[i]- 1,
    TRUE ~ test$change[i])
  test$change[i] <- if_else(is.na(test$resp[i]), NA_real_, test$change[i])
}

결국 이것은 변수가 30 개를 초과하고 행이 100000 개를 초과하는 데이터 세트에 적용되어야합니다.

AntoniosK

다음은 NA가있는 모든 행을 제거하고 일부 계산을 수행하고 올바른 위치에서 NA 행을 다시 조인하는 대체 방법입니다.

library(tidyverse)
library(zoo)

# example data
test <- data.frame(resp = c(9, NA, NA, 11, NA, NA, 6, 16, NA, 12, 0, 0, 0, 0, 0, NA, 0, 11, NA, NA, NA, NA, NA, NA, 14))

# add an id for each row
test = test %>% mutate(id = row_number())

test %>%
  na.omit() %>%                                                               # exclude rows with NAs
  mutate(flag = case_when(resp == lag(resp, default = first(resp)) ~ 0,
                          resp > lag(resp, default = first(resp)) ~ 1,
                          resp < lag(resp, default = first(resp)) ~ -1)) %>%  # check relationship between current and previous value
  mutate(g = cumsum(flag != lag(flag, default = first(flag)))) %>%            # create a grouping based on change in flag column
  group_by(g) %>%                                                             # for each group
  mutate(change = ifelse(flag != 0, flag * row_number(), flag)) %>%           # calculate the change column
  ungroup() %>%                                                               # forget the grouping
  select(id, change) %>%                                                      # keep useful columns
  right_join(test, by="id") %>%                                               # join back to get NA rows in the right place
  select(resp, change)                                                        # keep useful columns

결과적으로 다음을 얻을 수 있습니다.

#    resp change
# 1     9      0
# 2    NA     NA
# 3    NA     NA
# 4    11      1
# 5    NA     NA
# 6    NA     NA
# 7     6     -1
# 8    16      1
# 9    NA     NA
# 10   12     -1
# 11    0     -2
# 12    0      0
# 13    0      0
# 14    0      0
# 15    0      0
# 16   NA     NA
# 17    0      0
# 18   11      1
# 19   NA     NA
# 20   NA     NA
# 21   NA     NA
# 22   NA     NA
# 23   NA     NA
# 24   NA     NA
# 25   14      2

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

R-누락 된 값이있는 데이터 프레임을 통해 열 방향으로 lm () 루프

분류에서Dev

누락 된 값이있는 Pandas의 행 방향 열에서 고유 한 값

분류에서Dev

R이 두 열 중 하나에 값이 있는지 행별로 큰 데이터 집합을 검색 한 다음 데이터가 누락 된 경우 값을 반환하도록하는 방법

분류에서Dev

R에 누락 된 값이있는 평행 위쪽 삼각형 데이터 프레임 (행렬)

분류에서Dev

R 값이 누락 된 경우 행 추가

분류에서Dev

데이터가 누락 된 데이터 프레임의 행에 적용 사용 및 행별로 함수 변경-r

분류에서Dev

누락 된 값이있는 SPSS 의미

분류에서Dev

R : for 루프 속도 향상

분류에서Dev

데이터 프레임 R의 값을 변경하는 중첩 된 foreach 루프

분류에서Dev

C 루프의 2 개 어레이 간 복사 속도 향상

분류에서Dev

하나 이상의 셀이 주어진 기준을 충족하는 경우 (예 : 누락 된 값이있는 경우) 모든 ID 행 삭제

분류에서Dev

누락 된 속성이없는 경우 빈 값이있는 개체에 추가

분류에서Dev

R에서 범주 형 값이 누락 된 경우에도 여러 데이터 프레임에서 행 만들기

분류에서Dev

R : 누락 된 값이있는 열을 데이터 프레임에 추가

분류에서Dev

R에서 누락 된 데이터가있는 행을 찾지 못함

분류에서Dev

Julia 데이터 프레임에서 누락 된 값이있는 행 선택

분류에서Dev

mutate_at를 사용하여 R의 누락 된 값이 누락되지 않은 경우 열 이름에서 얻은 값으로 대체

분류에서Dev

R에서 여러 변수의 이상 값을 95 %로 변경하는 루프

분류에서Dev

R-행이 누락 된 sort () 출력

분류에서Dev

R-for 루프와 붙여 넣기 / 붙여 넣기 사이의 조합 속도 향상 0

분류에서Dev

R의 데이터 프레임에 누락 된 행과 보간 된 값을 어떻게 추가합니까?

분류에서Dev

Pandas : 한 열에 누락 된 데이터가있는 행의 데이터 프레임 값 업데이트

분류에서Dev

R의 이전 또는 다음 행 값에 따라 열에 누락 된 값 추가

분류에서Dev

경고 메시지의 의미 : 누락 된 값 (geom_path)이 포함 된 4 개 행 제거

분류에서Dev

데이터 프레임 Python의 특정 위치에서 누락 된 값이있는 행 삭제

분류에서Dev

여러 데이터 프레임의 값을 할당하는 루프 속도 향상

분류에서Dev

향상된 for 루프의 지역 변수 범위

분류에서Dev

특정 열 범위에 누락 된 값이있는 경우 데이터 프레임의 열 값을 업데이트하는 방법은 무엇입니까?

분류에서Dev

.NET Core WebApi 작업은 요청 본문에 속성이 누락 된 경우에도 실행됩니다.

Related 관련 기사

  1. 1

    R-누락 된 값이있는 데이터 프레임을 통해 열 방향으로 lm () 루프

  2. 2

    누락 된 값이있는 Pandas의 행 방향 열에서 고유 한 값

  3. 3

    R이 두 열 중 하나에 값이 있는지 행별로 큰 데이터 집합을 검색 한 다음 데이터가 누락 된 경우 값을 반환하도록하는 방법

  4. 4

    R에 누락 된 값이있는 평행 위쪽 삼각형 데이터 프레임 (행렬)

  5. 5

    R 값이 누락 된 경우 행 추가

  6. 6

    데이터가 누락 된 데이터 프레임의 행에 적용 사용 및 행별로 함수 변경-r

  7. 7

    누락 된 값이있는 SPSS 의미

  8. 8

    R : for 루프 속도 향상

  9. 9

    데이터 프레임 R의 값을 변경하는 중첩 된 foreach 루프

  10. 10

    C 루프의 2 개 어레이 간 복사 속도 향상

  11. 11

    하나 이상의 셀이 주어진 기준을 충족하는 경우 (예 : 누락 된 값이있는 경우) 모든 ID 행 삭제

  12. 12

    누락 된 속성이없는 경우 빈 값이있는 개체에 추가

  13. 13

    R에서 범주 형 값이 누락 된 경우에도 여러 데이터 프레임에서 행 만들기

  14. 14

    R : 누락 된 값이있는 열을 데이터 프레임에 추가

  15. 15

    R에서 누락 된 데이터가있는 행을 찾지 못함

  16. 16

    Julia 데이터 프레임에서 누락 된 값이있는 행 선택

  17. 17

    mutate_at를 사용하여 R의 누락 된 값이 누락되지 않은 경우 열 이름에서 얻은 값으로 대체

  18. 18

    R에서 여러 변수의 이상 값을 95 %로 변경하는 루프

  19. 19

    R-행이 누락 된 sort () 출력

  20. 20

    R-for 루프와 붙여 넣기 / 붙여 넣기 사이의 조합 속도 향상 0

  21. 21

    R의 데이터 프레임에 누락 된 행과 보간 된 값을 어떻게 추가합니까?

  22. 22

    Pandas : 한 열에 누락 된 데이터가있는 행의 데이터 프레임 값 업데이트

  23. 23

    R의 이전 또는 다음 행 값에 따라 열에 누락 된 값 추가

  24. 24

    경고 메시지의 의미 : 누락 된 값 (geom_path)이 포함 된 4 개 행 제거

  25. 25

    데이터 프레임 Python의 특정 위치에서 누락 된 값이있는 행 삭제

  26. 26

    여러 데이터 프레임의 값을 할당하는 루프 속도 향상

  27. 27

    향상된 for 루프의 지역 변수 범위

  28. 28

    특정 열 범위에 누락 된 값이있는 경우 데이터 프레임의 열 값을 업데이트하는 방법은 무엇입니까?

  29. 29

    .NET Core WebApi 작업은 요청 본문에 속성이 누락 된 경우에도 실행됩니다.

뜨겁다태그

보관