2013-02-28 18 views
5

こんにちは、私はここで非常に簡単なことをやっています。条件に基づいて列間の比率を計算するR

私は3列のデータを持っています。 a、bおよびc。私は比を計算しなく使用することができませんでし

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の値が使用されるだけ大きい

5よりコードである場合bとcの比を計算します条件がある。私は自明だが、これは多くの時間を要している。私はあなたの助けに感謝します。

+2

+1再現可能な例です。 –

答えて

5

ifelseを使用できます。あなたは結果はbが5未満である場合になりたいものを言っていないので、私はあなたがそこにNAをしたいと仮定しました。:

> 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

Iは、第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

私の質問にお答えいただきありがとうございます。私は1つのことをする3つの方法を知っていた。 –

+0

@Jdbabaあなたは今4を知っています:) – agstudy

+2

More == better;) –

4

Iは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

関連する問題