2012-06-22 3 views
3

R에 두 개의 열 데이터 프레임이 있고 첫 번째 두 함수의 값인 세 번째 열을 추가하고 싶습니다. 는만큼 기능이 간단한 수학 공식 아무 문제 data$c <- data$a*15 - 10 + data$b*0.5 입니다하지만 내 기능이 아닌 지속적인하고 조건문을 포함, 나는하고 싶으면 : foo <- function(x,y){if (x<2) {return(0)} else {....}data$c <- foo(data$a, data$b) 그러나이 나에게 오류를 가져옵니다. 나는 무엇을 놓치고 있습니까?함수를 사용하는 방법 R

+1

시도를 질문을 할 때 더 많은 정보를 제공 할 수 있습니다. 도움이되면 사람들이 도움을줍니다. –

+0

이 질문은있는 그대로 답변 할 수 있습니다. –

답변

0
df = data.frame(a=rnorm(20),b=runif(20)) 

new_var = function(x,y) 
{ 
    if(x<0) 
    { x = x^2} 
    else 
    { x = x^3} 

    if(y<.5) 
    { -log10(y)} 
    else 
    { 
    exp(y) 
    } 
    return((2*(x+y))/x*y) 
} 

df$c = sapply(1:length(df$a), function(i){new_var(df$a[i],df$b[i])}) 

head(df) 
      a   b   c 
1 -0.09149107 0.04834675 0.65517298 
2 -2.43732351 0.04086087 0.08228385 
3 -1.69573283 0.54795413 1.30474339 
4 -0.40106220 0.72952356 8.07641367 
5 -0.38244706 0.65524147 7.18118555 
6 0.76334945 0.38455655 1.43404971 
+0

예쓰! 반복은 트릭을 수행합니다. – Ivana

+0

당신이 생각하는 답변을 upvote하는 것을 잊지 마십시오. Chris의 답변, fyi는 시간 및 CPU 사용면에서보다 효율적입니다. 당신이 당신의 기능을 게시했다면 우리는 더 많은 도움을 줄 수있었습니다! –

+0

나는 아직도 그렇게하는 평판이 부족하다 .... – Ivana

2

당신은 ifelse 기능을 찾고 있습니다. 첫 번째 데이터 프레임을 생성합니다

> d <- data.frame(x = rnorm(5), y=rnorm(5)) 
> d 
      x   y 
1 -0.3581471 0.18149804 
2 0.5096839 0.01260114 
3 0.6742558 1.04851531 
4 1.0761349 -0.17504221 
5 -0.2373933 -1.11475886 

지금 ifelse를 사용하여 여분의 열을 만듭니다

> d$z <- ifelse(d$x < 0, 0, d$y + 1) 
> d 
      x   y   z 
1 -0.3581471 0.18149804 0.0000000 
2 0.5096839 0.01260114 1.0126011 
3 0.6742558 1.04851531 2.0485153 
4 1.0761349 -0.17504221 0.8249578 
5 -0.2373933 -1.11475886 0.0000000 
관련 문제