종단 데이터가있는 긴 형식의 데이터 세트가 있고 하나의 변수에 대해 시점 1의 누락 값을 시점 1의 값으로 채우고 싶지만 시점 1의 누락을 시점의 값으로 채우고 싶지 않습니다. 2 등등. 내 데이터 세트는 id와 시간대로 정렬됩니다.
특정 ID의 모든 시점에서 누락 된 부분을 채워야하는 경우 채우기 기능을 성공적으로 사용했습니다.
데이터 프레임 예 :
df <- data.frame(id=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),
timepoint=c(0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3),
var1=c(NA,9,8,10, NA, 10, NA, 12, NA, NA, 12, 11, NA, 12, 12, NA))
> df
id timepoint var1
1 1 0 NA
2 1 1 9
3 1 2 8
4 1 3 10
5 2 0 NA
6 2 1 10
7 2 2 NA
8 2 3 12
9 3 0 NA
10 3 1 NA
11 3 2 12
12 3 3 11
13 4 0 NA
14 4 1 12
15 4 2 12
16 4 3 NA
이 시점에 상관없이 누락 된 부분을 채워야 할 때 작동합니다.
library(dplyr)
library(tidyr)
df <- df %>%
group_by(id) %>%
fill(`var9`:`var12`, .direction = "up") %>%
as.data.frame
그러나 시점 0에서 누락 된 행만 채우도록 지정하는 데 문제가 있습니다. 도움을 주시면 감사하겠습니다.
예상되는 출력 :
> df
id timepoint var1
1 1 0 9
2 1 1 9
3 1 2 8
4 1 3 10
5 2 0 10
6 2 1 10
7 2 2 NA
8 2 3 12
9 3 0 NA
10 3 1 NA
11 3 2 12
12 3 3 11
13 4 0 12
14 4 1 12
15 4 2 12
16 4 3 NA
- 답변 # 1
- 답변 # 2
이것은 지나치게 단순화 된 것일 수도 있지만
library(dplyr) df %>% group_by(id) %>% mutate(var2 = replace(var1, timepoint == 0 & is.na(var1), var1[timepoint == 1])) # id timepoint var1 var2 # <dbl> <dbl> <dbl> <dbl> # 1 1 0 NA 9 # 2 1 1 9 9 # 3 1 2 8 8 # 4 1 3 10 10 # 5 2 0 NA 10 # 6 2 1 10 10 # 7 2 2 NA NA # 8 2 3 12 12 # 9 3 0 NA NA #10 3 1 NA NA #11 3 2 12 12 #12 3 3 11 11 #13 4 0 NA 12 #14 4 1 12 12 #15 4 2 12 12 #16 4 3 NA NA
에 전화하면됩니다. 다시 기능하지만 이번에는 방향이 아래로 내려갑니다. 그러면 전체 데이터 프레임이 완료됩니다.fill
df <- data.frame(id=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), timepoint=c(0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3), var1=c(NA,9,8,10, NA, 10, NA, 12, NA, NA, 12, 11, NA, 12, 12, NA))
를 사용합니다 성명서 뒤에ifelse
기능.lead
수율 :
library(dplyr); library(tidyr); df %>% group_by(id) %>% mutate(var1 = ifelse(is.na(var1) & timepoint == 0, lead(var1, 1), var1))
# A tibble: 16 x 3 # Groups: id [4] id timepoint var1 <dbl> <dbl> <dbl> 1 1 0 9 2 1 1 9 3 1 2 8 4 1 3 10 5 2 0 10 6 2 1 10 7 2 2 NA 8 2 3 12 9 3 0 NA 10 3 1 NA 11 3 2 12 12 3 3 11 13 4 0 12 14 4 1 12 15 4 2 12 16 4 3 NA
관련 자료
- r - dplyr을 사용하여 선택한 열의 한 하위 집합에서 다른 모든 하위 집합으로 값 복사
- R의 하위 집합 데이터 프레임, B 열의 행에서 NA가 아닌 열 A의 dplyr 필터 행 값
- R을 사용하여 데이터 프레임에서 개별 열의 최소값을 기반으로 특정 열의 행을 하위 집합하는 방법
- pandas - 아래 행 값 위에 복사
- pine script - 80 초과 및 20 미만의 확률 적 % D 값
- dataframe - 문자열 이름을 기반으로 하위 집합 값을 집계하고 R에서 해당 값의 %를 계산합니다
- dataframe - 0보다 큰 값을 계산하고 행에서 패턴과 일치하는 수를 계산합니다 (R)
- 한 행의 값이 벡터의 값과 일치하는 경우 R의 데이터 프레임에있는 행의 하위 집합을 어떻게 설정합니까?
- typescript - 배열 값을 기반으로 Union 유형의 하위 집합 가져 오기
- python - Pandas의 특정 열에 대해 99 번째 백분위 수 이상의 값을 가진 모든 행을 효율적으로 제거하는 방법은 무엇입니까?
- mysql - 위와 아래의 값을 기반으로 필드 업데이트
- r - 가장 큰 2 개의 값을 남기도록 데이터 세트를 부분 집합
- dataframe - R 행 값을 기준으로 group_by, 분할 또는 부분 집합을 만드는 방법
- r - 다른 데이터 프레임의 값을 기반으로 데이터 프레임의 하위 집합을 어떻게 설정합니까?
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- JavaScript 변수를 HTML div에 '출력'하는 방법
- python - 문자열에서 특정 문자 제거
우리는
group_by
할 수있다 와이즈 비즈id
를 사용하십시오.replace
에서 값을 변경하려면 &timepoint = 0
var1
입니다 해당NA
값에서 어디var1
각 그룹에서.