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 回答