2013-08-23 4 views
1

하나 이상의 다른 열 (df $ b, df $ c)에서 수학 연산의 결과로 데이터 프레임 열 (df $ d)을 업데이트하려는 경우 (다른 열 열 (df $ a).R 조건부 대체 데이터 프레임 값

set.seed(55) 
df <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10), d = 0) 
df$d[df$a > 0] <- df$b[df$a > 0]/df$c[df$a > 0] 

세 번째 줄은 df $ d에 대한 예상 값을 생성합니다. 더 간결하게 작성하는 방법이 있습니까? 논리적 색인을 반복 할 필요가없는 옵션에 특히 관심이 있습니다.

df$d[df$a > 0] <- df$b/df$c 

감사 : 표현의이 스타일은 파이썬/팬더 작동 및 '[안양 $ A> 0]'할당 연산자의 왼쪽에 하나의 인스턴스 만이 필요 예를 들어

당신은 모든 조언을 듣고 있습니다.

답변

6

사용 data.table 대신에, 여러분의 인생이 훨씬 더 좋을 것이다 :

library(data.table) 
dt = data.table(df) # or construct it same way: dt = data.table(a = rnorm(10),...) 

dt[a > 0, d := b/c] 
1

이 시도 :

transform(df, d = ifelse(a > 0, b/c, d)) 
0
transform(df, d = b/c * (a > 0)) 

이 트릭을 할 것입니다. 이 해결책은 이 아니며은 열 d의 존재 여부에 따라 다릅니다. 따라서 0으로 열을 초기화 할 필요가 없습니다.