5

こんにちは私はここで非常に簡単なことをしています。

3列のデータがあります。a、b、c。bの値が5より大きい場合の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)

比率を計算しましたが、条件が使えませんでした。些細なことは知っていますが、これにはかなりの時間がかかります。私はあなたの助けに感謝します。

4

4 に答える 4

6

を使用できます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
于 2013-02-28T06:47:23.247 に答える
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
于 2013-02-28T07:03:21.450 に答える
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
于 2013-02-28T06:47:52.673 に答える
1

最初に比率を計算してから、次NAの値に割り当てb < 5ます。

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
于 2013-02-28T06:48:01.723 に答える