2016-06-30 1 views
0

긴 형식으로 구성된 불균형 데이터 세트에서 세션 1에서 "마지막 세션"으로의 안정적인 개선 또는 악화를 계산하고 싶습니다.긴 형식의 불균형 데이터로부터 assesment를 post하기 전에 신뢰성있는 개선을 계산하십시오.

내가 가지고있는 데이터는 다음과 같습니다

ID <- c("A","A","B","B","B","C","C","C","C") 
Session <-c(1,2,1,2,3,1,2,3,4) 
Value <- c(10,6,25,35,15,20,25,35,35) 
Have <- data.table(ID,Session,Value) 
Have 

ID Session Value 
A  1 10 
A  2  6 
B  1 25 
B  2 35 
B  3 15 
C  1 20 
C  2 25 
C  3 35 
C  4 35 

내가 같이 할 필요가있는 데이터 : 내가 시도

Change <- c(-4,-4,-10,-10,-10,15,15,15,15) 


Need <- data.table(ID,Session, Value,Change) 
Need 

ID Session Value Change 
A  1 10 -4  
A  2  6 -4  
B  1 25 -10 
B  2 35 -10 
B  3 15 -10 
C  1 20 15  
C  2 25 15  
C  3 35 15  
C  4 35 15  

이 : 나는 코드를 사용

Have$change<-as.vector(unlist(tapply(Have$Value,Have$ID,FUN=function(x){return (x-rep(x[1],length(x)))}))); 
Have 
ID Session Value change 
A  1 10  0 
A  2  6  -4 
B  1 25  0 
B  2 35  10 
B  3 15 -10 
C  1 20  0 
C  2 25  5 
C  3 35  15 
C  4 35  15 

이 게시물의 게시물 Calculating change from baseline with data in long format

답변

0

가장 예쁜 코드는 아니지만 원하는 것을 수행한다고 생각합니다. 나는 data.table을 모른다. 대신 dplyr을 사용했다. 나는 또한이 질문에 https://stackoverflow.com/a/31529043/4651564

library(dplyr) 

Have <- as.data.frame(Have) 

Have2 <- Have %>% 
    group_by(ID) %>% 
    arrange(Session) %>% 
    filter(row_number() %in% c(1 , n())) %>% 
    summarise(change = diff(Value) ) 


Have %>% left_join (Have2 , by = "ID") 

편집에서 첫 번째와 마지막 선택하는 방법에 약간의 도움을 얻었다 : 내 코드 그것을 답장을 보내

+0

안녕 감사를 단순화하기 위해 약간의 업데이트! 코드는 위의 예제에서 잘 작동합니다. 원래 데이터 세트에서 시도했지만 "오류 : 단일 값 예상"을 반환합니다 ... 원본 데이터는 예제에서와 같이 data.frame입니다. 내 데이터 집합에서 ID 변수를 문자에서 문자로 변경했지만 (예에서와 같이) 오류가 계속 발생합니다. ID 변수는 예 : "BNCS01"이고, 세션은 숫자이며 (예제에서는 동일하지만 1 - 29 범위 임) 값은 0-40의 숫자 범위 (3 개의 소수점 포함)입니다. 오류 메시지가 나타나는 이유에 대한 제안 사항은 무엇입니까? – Carl

+0

안녕하세요 @ 카를,이 문제는 귀하의 그룹 중 하나는 그것에 하나의 관찰을 가지고 있다고 생각합니다. 나는 단지 하나의 관측치가'diff'에 전달된다면 dplyr이 길이 1의 벡터를 기대하고있는 길이 0의 벡터를 반환한다는 것을 고려하지 않았습니다. 이것을 해결하기 위해서 여러분은 자신의 diff 함수를 쓰고 사용할 수 있습니다 외곽 또는 누락 된 값을 처리하는 방법을보다 효율적으로 제어 할 수 있다는 이점이 있습니다. 예를 들어 다음과 같은'DIFF <- function (x) { ### NAs 제거 x <- x [! is.na (x)] if (length (x) == 0) return (NA) else return (max (x) - min (x)) }' – CroGo

관련 문제