根据R中的条件计算列之间的比率

时间:2013-02-28 06:44:08

标签: r

嗨,我在这里做的很简单。

我有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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:3)

您可以为df$dwith()函数内的值进行子集化。

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

答案 3 :(得分: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