嗨,我在这里做的很简单。
我有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)
我计算了比率,但无法使用那里的条件。我知道它的微不足道,但这需要花费很多时间。我感谢您的帮助。
答案 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$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
答案 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