如何根据R中的条件创建具有两列比率的列?

要根据 R 数据框中的条件创建具有两列比率的新列,我们可以使用带有 ifelse 函数的除法符号。

例如,如果我们有一个名为 df 的数据框,其中包含两列 X 和 Y,并且我们想根据 X 大于 5 的条件创建一个具有 X 和 Y 比率的新列,那么我们可以使用下面给出的命令 -

df$Ratio_X_Y<-with(df,ifelse(X>5,X/Y,NA))

示例 1

以下代码段创建了一个示例数据框 -

x1<-rpois(20,2)

x2<-rpois(20,2)

df1<-data.frame(x1,x2)

df1

输出结果

创建以下数据框 -

   x1 x2

1  0  0

2  2  6

3  3  1

4  3  0

5  4  2

6  2  1

7  3  2

8  3  3

9  2  0

10 3  3

11 0  5

12 2  1

13 4  1

14 2  1

15 4  0

16 1  2

17 1  2

18 3  2

19 6  4

20 1  0

为了在 x1 小于 4 时找到 x1 和 x2 的比率,否则返回 NA,将以下代码添加到上面的代码片段中 -

df1$Ratio_x1_x2<-with(df1,ifelse(x1<4,x1/x2,NA))

df1

输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

  x1  x2  Ratio_x1_x2

1  0  0         NaN

2  2  6   0.3333333

3  3  1   3.0000000

4  3  0         Inf

5  4  2          NA

6  2  1   2.0000000

7  3  2   1.5000000

8  3  3   1.0000000

9  2  0         Inf

10 3  3   1.0000000

11 0  5   0.0000000

12 2  1   2.0000000

13 4  1          NA

14 2  1   2.0000000

15 4  0          NA

16 1  2   0.5000000

17 1  2   0.5000000

18 3  2   1.5000000

19 6  4          NA

20 1  0         Inf

示例 2

以下代码段创建了一个示例数据框 -

y1<-sample(0:9,20,replace=TRUE)

y2<-sample(0:9,20,replace=TRUE)

df2<-data.frame(y1,y2)

df2

输出结果

创建以下数据框 -

   y1 y2

1  6  7

2  2  2

3  9  1

4  2  2

5  0  0

6  6  1

7  5  1

8  3  7

9  4  9

10 6  3

11 2  8

12 1  6

13 7  7

14 3  2

15 5  5

16 9  5

17 6  7

18 5  0

19 0  1

20 5  4

为了在 y1 小于 5 时找到 y1 和 y2 的比率,否则返回 NA,将以下代码添加到上面的代码片段中 -

df2$Ratio_y1_y2<-with(df2,ifelse(y1<5,y1/y2,NA))

df2

输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

   y1 y2 Ratio_y1_y2

1  6  7         NA

2  2  2  1.0000000

3  9  1         NA

4  2  2  1.0000000

5  0  0        NaN

6  6  1         NA

7  5  1         NA

8  3  7  0.4285714

9  4  9  0.4444444

10 6  3         NA

11 2  8  0.2500000

12 1  6  0.1666667

13 7  7         NA

14 3  2  1.5000000

15 5  5         NA

16 9  5         NA

17 6  7         NA

18 5  0         NA

19 0  1  0.0000000

20 5  4         NA

以上是 如何根据R中的条件创建具有两列比率的列? 的全部内容, 来源链接: utcz.com/z/317236.html

回到顶部