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

5

大家好,我在这里做一件非常简单的事情。

我有三列数据: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个回答

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

非常感谢。我也尝试使用if else条件,但是无法弄清楚。我会将其标记为答案。 - Jd Baba

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

+1 表示另一种选择,如果您有时间,请留下您的评论。注:该链接已失效,请忽略最后一句话 - A5C1D2H2I1M1N2O1R2T1
@AnandaMahto,好的,我会做的。 - agstudy

3

您可以在with()函数内对df$d的值进行子集处理。

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

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

谢谢您回答我的问题。我知道三种方法来完成同一件事情。 - Jd Baba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接