2017-02-27 6 views
1

경고 : 여러 부분으로 된 질문!순차적으로 명명 된 변수를 새로 만들고 수준 평균을 입력하십시오

나는

나는의 숫자 컬럼의 수 (24)와 데이터 프레임을 가지고 ....이 부분은 다른 곳에서 답을했지만 코드의 좋은 인색 비트에 함께을 가지고 고군분투 실현 관심. 각 열에 대해, 그 값이 해당 변수에 대한 성 특정 십계관의 평균에 해당하는 동일한 데이터 프레임 (현명하게 명명 된)에 새 변수를 만들고 싶습니다 (섹스는 다른 열에 코드화 된 0/1로 표시됨) .

'WBC'라는 원래 열의 새 열 이름은 'WBC_meandec_women'및 'WBC_meandeac_men'과 같습니다.

나는 새로운 변수를 생성하기 위해 다양한 비트의 코드를 시도한 다음 십진수와 관련된 값을 할당하지만 아무 것도 잘 수행하지 못하고 함께 배치하는 방법을 알 수 없다.

goaldata <-  data.frame(id=c(1:100),sex=rep(c(1,0),50),WBC=rnorm(100),RBC=rnorm(100),WBC_decmean_women=rep(NA,length(dummydata)),WBC_decmean_men=rep(NA,length(dummydata)),RBC_decmean_women=rep(NA,length(dummydata)),RBC_decmean_men=rep(NA,length(dummydata))) 
: 난 그냥
dummydata <- data.frame(id=c(1:100),sex=rep(c(1,0),WBC=rnorm(100),RBC=rnorm(100)) 

달성하려고 ... 난 그냥 R 거기에 도착하기에 충분한 유창하지 않다, 동일한 코드 청크로 모든 부분을 넣어 영리한 방법이 알고

...하지만 분명히 NA 대신 올바른 값을 사용하고 약 24 개의 원래 변수 목록을 제공합니다.

도움을 주시면 큰 도움이됩니다. 난 당신이 바로, 내가 덕트 테이프의이 거대한 공을 제안 할 것이다 이해할 경우에 따라

답변

1

...

는 는
# fake data 
dummydata <- data.frame(id=c(1:100),sex=rep(c(1,0),50),WBC=rnorm(100),RBC=rnorm(100)) 

# a function to calculate decile means 
decilemean <- function(x) { 
    xrank <- rank(x) 
    xdec <- floor((xrank-1)/length(x)*10)+1 
    decmeans <- as.numeric(tapply(x,xdec,mean)) 
    xdecmeans <- decmeans[xdec] 
    return(xdecmeans) 
} 

# looping thru your data columns and making new columns 
newcol <- 5   # the first new column to create 
for(j in c(3,4)) { # all of your colums to decilemean-ify 
    dummydata[,newcol] <- NA 
    dummydata[dummydata$sex==0,newcol] <- decilemean(dummydata[dummydata$sex==0,j]) 
    names(dummydata)[newcol] <- paste0(names(dummydata)[j],"_decmean_women") 
    dummydata[,newcol+1] <- NA 
    dummydata[dummydata$sex==1,newcol+1] <- decilemean(dummydata[dummydata$sex==1,j]) 
    names(dummydata)[newcol+1] <- paste0(names(dummydata)[j],"_decmean_men") 
    newcol <- newcol+2 
} 
내가 비록 테스트를 권하고 싶습니다

)

+0

슈퍼 매트, 그것은 보인다 작업! 사랑스럽고 작은 것도 감사합니다. – user4575913