각 환자 (ID)에 대해 서로 다른 시간에 다른 값을 가진 데이터가 있습니다 (긴 형식, tidyr :: gather () 사용).
ID TIME VALUE
1 10 14
1 20 34
1 30 35
2 10 15
2 20 14
2 30 11
3 10 16
3 20 64
3 30 55
MAX
각 환자가 최대 값을 가졌을 때의 시간을 포함 하는 새 열을 다음과 같이 추가하고 싶습니다.
ID TIME VALUE MAX
1 10 14 30
1 20 34 30
1 30 35 30
2 10 15 10
2 20 14 10
2 30 11 10
3 10 16 20
3 20 64 20
3 30 55 20
나는 다른 방법을 사용하여 내 테이블을 이와 같이 보이도록 시도했지만 성공하지 못하고 매번 내 데이터를 엉망으로 만들었고 성공하지 않고 여기에서 stackoverflow를 확인하려고했습니다.
내가 시도한 방법은 다음과 같습니다.
data$MAX<- data %>% dplyr::group_by(data$ID) %>% filter(VALUE$ID == max(VALUE$ID))
이를 수행하기위한 제안이 있습니까?
편집하다:
에러 메시지:
## Warning: Problem with `mutate()` input `MAX`.
## i NAs introduced by coercion
## i Input `MAX` is `data$TIME[which.max(data$VALUE)]`.
## i The error occurred in group 1: data$ID = "pat1".
## Warning in which.max(data$VALUE): NAs introduced by coercion
rmd 스크립트를 실행 한 후 출력에서 다른 ID에 대해이 오류 메시지가 반복적으로 표시됩니다.
EDIT2 :
(간결성을 위해 다른 모든 변수를 제거했습니다)
## 'data.frame': 1500 obs. of 13 variables:
## $ ID : chr "pat1" "pat10" "pat100" "pat11" ...
## $ TIME : chr "Time.0.15.h" "Time.0.15.h" "Time.0.15.h" "Time.0.15.h" ...
## $ VALUE : chr "0" "0" "0" "0" ...
대부분의 VALUE 행은 0이 아니고 대부분> 0입니다.
which.max
숫자 인덱스를 만들고 'ID'로 그룹화 한 후 해당 'TIME'의 하위 집합을 만드는 데 사용할 수 있습니다.
library(dplyr)
data %>%
group_by(ID) %>%
mutate(MAX = TIME[which.max(VALUE)])
# // if the column is not numeric, convert to numeric
# mutate(MAX = TIME[which.max(as.numeric(VALUE))])
# it may be better to convert it before that
-산출
# A tibble: 9 x 4
# Groups: ID [3]
# ID TIME VALUE MAX
# <int> <int> <int> <int>
#1 1 10 14 30
#2 1 20 34 30
#3 1 30 35 30
#4 2 10 15 10
#5 2 20 14 10
#6 2 30 11 10
#7 3 10 16 20
#8 3 20 64 20
#9 3 30 55 20
data <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), TIME = c(10L,
20L, 30L, 10L, 20L, 30L, 10L, 20L, 30L), VALUE = c(14L, 34L,
35L, 15L, 14L, 11L, 16L, 64L, 55L)), class = "data.frame", row.names = c(NA,
-9L))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다