2014-08-27 3 views
1

다음을 원합니다. 나는 데이터 집합의 총 행 수의 나머지를 20으로 나눈 나머지 (0,1,2, ... 19)를 기반으로 x1, x2, x3 등의 값을 변수에 대입합니다. blf. 예를 들어, n 번째 행 & 20의 나머지가 0이면 blf = 0.8이고, n 번째 행의 나머지가 & 20이면 blf = 0.7이고, n 번째 행의 나머지와 20이 2 또는 3이면 blf = 0.6 등. 나는 R 에서 작업을 수행 할 때 (내 코드는 다음과 같습니다 및 샘플 데이터 세트는 여기에서 찾을 수 있습니다 (RDATA 및 CSV) 모두 : http://goo.gl/qgbeIJ는) 나는 다음과 같은 오류가 발생합니다 :행의 나머지 값을 기준으로 값을 지정하십시오.

Error in ifelse(sampledat[1:nrow(sampledat)%%20 == 0], 0.8, blf) : (list) object cannot be coerced to type 'logical'

sampledat$blf <- 0.1 
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==0],0.8,blf)) 
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==1],0.7,blf)) 
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==2] | sampledat[1:nrow(sampledat)%%20==3] ,0.6,blf)) 

한 가지 가능한 솔루션입니다 나머지 부분을 이라는 나머지 변수로 저장하고으로 남겨두고 벡터 값을 기반으로 ifelse 연산을 수행하지만 한 단계로 처리하는 방법이 있는지 궁금합니다.

sampledat$remain <- (1:nrow(sampledat))%%20 
sampledat$blf <- 0.1 
sampledat$blf <- with(sampledat, ifelse(remain==0,0.8,blf)) 
sampledat$blf <- with(sampledat, ifelse(remain==1,0.7,blf)) 
sampledat$blf <- with(sampledat, ifelse(remain==2 | remain==3 ,0.6,blf)) 

어떤 통찰력도 인정 될 것입니다.

TIA, Krishnan

+1

적어도 'remaining'이 3을 초과하지 않으면'if-else'를 중첩하고 0 또는 1이 아닌 모든 경우를 최종 값에 지정하십시오. 'sampledat $ blf <- 0.6 + 0.1 * (sampledat $ remaining == 1) + 0.2 * (sampledat $ remaining == 0)' –

+0

과 같이'with '가 필요하다고 생각하지 않습니다. 나머지는 3보다 큽니 까? –

+1

동일한 프로세스가 19 시까 지 나머지를 기반으로 blf에 지정된 다른 값으로 계속되며 데이터 테이블의 모든 레코드에 대해 반복됩니다. 간결함을 위해 나머지 = 19에 대한 모든 방법을 포함하지 않았습니다. – Krishnan

답변

2

당신은 3의 나머지 후 발생해야 무슨 말을하지 않았다, 그래서 0.0을 사용했다. 나는 이것을 2 단계 (일종의) 이해하기 쉬운 과정으로했다.

answers=c(0.8,0.7,0.6,0.6,0.0, 
     0.0,0.0,0.0,0.0,0.0, 
     0.0,0.0,0.0,0.0,0.0, 
     0.0,0.0,0.0,0.0,0.0) 

sampledata$blf<-answers[(as.numeric(rownames(sampledata))%%20)+1] 

답변 배열은 필요에 따라 수정할 수있다.

+0

이 솔루션은 완벽하게 작동합니다. Andrew에게 감사드립니다. – Krishnan

관련 문제