2017-10-13 1 views
1

col.b 및 행 현명한 비교에 따라 데이터 프레임 (df)에 세 번째 열을 추가하고 싶습니다. col.b의 원소가 0.1 미만인 경우를 제외하고는 각 행마다 하나씩 증가 시키길 원합니다. 이 경우 col.c의 값은 col.c의 이전 값과 같아야합니다.행 비교 및 ​​새 열의 업데이트

df <-structure(list(col.a = c(1, 2, 3, 4, 5, 6, 7, 8, 
     9, 10), col.b = c(0.176776695296637, 0.166666666666667, 
     0.171692917879238, 0.247435829652697, 0.0909090909090909, 
     0.244948974278318, 0.142857142857143, 0.072005229038445, 
     0.202030508910442, 0.248451997499977)), .Names = c("col.a", 
     "col.b"), row.names = c(NA, -10L), class = "data.frame") 

> df 
    col.a   col.b 
     1 0.176776695296637 
     2 0.166666666666667 
     3 0.171692917879238 
     4 0.247435829652697 
     5 0.0909090909090909 
     6 0.244948974278318 
     7 0.142857142857143 
     8 0.072005229038445 
     9 0.202030508910442 
    10 0.248451997499977` 

출력

> df 
    col.a   col.b  col.c 
     1 0.176776695296637 1 
     2 0.166666666666667 2 
     3 0.171692917879238 3 
     4 0.247435829652697 4 
     5 0.0909090909090909 4 
     6 0.244948974278318 5 
     7 0.142857142857143 6 
     8 0.072005229038445 6 
     9 0.202030508910442 7 
    10 0.248451997499977 8 

은 지금까지 나는 작품의 종류 루프를 내놓았다 원하는하지만 계산은 꺼져 있고 내 큰 dataframe에 사용하는 경우가 굉장히 느려집니다

for (i in 1:nrow(df)){ 
    ifelse(df$col.b[i] >0.1 ,m <- df$col.a[i], m <-df$col.a[i-1])   
    df$col.c[i] <- m } 

나는 이것을 실현하는 더 빠른 방법을 모색한다.

답변

1

우리는 논리적 vector

with(df, cumsum(col.b > 0.1)) 
#[1] 1 2 3 4 4 5 6 6 7 8 
cumsum을 할 필요가