2013-02-28 7 views
5

안녕하세요 저는 여기에서 아주 간단한 일을하고 있습니다.조건에 따라 열 사이의 비율을 계산하십시오.

데이터 열이 3 개 있습니다. a, b 및 c. I의 비를 계산하지만, 사용하지 수

a <- c(1,2,3,4,5,6,7,8) 
b <- c(2,4,5,8,10,12,15,18) 
c <- c (10,9,8,15,31,12,13,12) 

df <- data.frame(a,b,c) 
## Calculate the ratio 
df$d <- with(df,b/c) 

: B의 ​​값이 다음과 같이 I이 사용 된 코드는 단지 큰 제

보다 때 I는 B 및 C의 비율을 계산할 거기 상태. 나는 그 사소한 것을 알고 있지만 이것은 많은 시간이 걸린다. 도와 주셔서 감사합니다.

+2

+1 재현 가능한 예. –

답변

5

ifelse을 사용할 수 있습니다. 당신이 NA이 원하는 : 당신은 B가 5보다 작은 위치를 경우로 결과를 원하는 말을하지 않습니다, 그래서 가정 한

> df$d <- with(df, ifelse(b > 5, b/c, NA)) 
> df 
    a b c   d 
1 1 2 10  NA 
2 2 4 9  NA 
3 3 5 8  NA 
4 4 8 15 0.5333333 
5 5 10 31 0.3225806 
6 6 12 12 1.0000000 
7 7 15 13 1.1538462 
8 8 18 12 1.5000000 
+0

+1, ifelse가 가장 우아한 솔루션입니다. –

+0

정말 고마워요. 나는 또한 다른 조건이라면 사용하려고 노력하고 있지만 알아 내지 못했습니다. 나는 이것을 답으로 표시 할 것이다. –

3

당신은 df$d에 대한과 with() 함수 내에서 값을 서브 세트 수 .

df$d[df$b>5] <- with(df[df$b>5,],b/c) 
df 
    a b c   d 
1 1 2 10  NA 
2 2 4 9  NA 
3 3 5 8  NA 
4 4 8 15 0.5333333 
5 5 10 31 0.3225806 
6 6 12 12 1.0000000 
7 7 15 13 1.1538462 
8 8 18 12 1.5000000 
+0

답변 해 주셔서 감사합니다. –

1

처음의 비율을 계산 한 다음 b < 5 값으로 NA 할당하는 것 : :)

df = within(df, { d = b/c }) 
df$d[df$b <= 5] <- NA 

> df 
    a b c   d 
1 1 2 10  NA 
2 2 4 9  NA 
3 3 5 8  NA 
4 4 8 15 0.5333333 
5 5 10 31 0.3225806 
6 6 12 12 1.0000000 
7 7 15 13 1.1538462 
8 8 18 12 1.5000000 
+0

제 질문에 답변 해 주셔서 감사합니다. 한 가지 일을하는 3 가지 방법을 알고있었습니다. –

+0

@Jdbaba 당신은 지금 4를 알고 있습니다 :) – agstudy

+2

More == better;) –

4

내가 transform 여기에 더 우아한이라고 생각을 (@Ananda 솔루션의 약간 다른)

transform(df, d= ifelse(b > 5, b/c, NA)) 
    a b c   d 
1 1 2 10  NA 
2 2 4 9  NA 
3 3 5 8  NA 
4 4 8 15 0.5333333 
5 5 10 31 0.3225806 
6 6 12 12 1.0000000 
7 7 15 13 1.1538462 
8 8 18 12 1.5000000 
+0

+1 다른 대안을 위해, 그리고 단지 재미로, 잠시 시간을 내시면, [이것에 대하여] (http://news.mrdwab.com/2012/12/04/what-exactly-is-elegant-code-in-r /)를 사용하십시오. – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto 물론 할 것입니다. – agstudy

관련 문제