如何在 R 数据框中基于另一列的某些条件创建一个新列?


有时我们想更改一列或使用数据框的其他列创建一个新列,这在创建分类列时通常需要,但也可以用于数值列。例如,我们可能想根据薪水创建一个列,如果薪水大于另一列中的薪水,则添加这些薪水,否则取两者的差值。这将帮助我们了解两列中的薪水是否相等、小于或大于。在 R 中,我们可以为此目的使用 transform 函数。

示例 1

考虑以下数据框

在线演示

> set.seed(1001)
> x1<-rpois(20,1)
> y1<-rpois(20,5)
> df1<-data.frame(x1,y1)
> df1

输出

  x1 y1
1  4  6
2  1  4
3  1  9
4  1  6
5  1  4
6  2  7
7  0  6
8  0  3
9  0  8
10 2  4 
11 1  5
12 0  9
13 2 10
14 1  4
15 0  3
16 2  2
17 0  2
18 0  6
19 0  6
20 2  2

创建一个 z1 列,如果 x1 大于 y1,则从 x1 中减去 y1,否则相加

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

示例

> df1<-transform(df1,z1=ifelse(x1>y1,x1-y1,x1+y1))
> df1

输出

  x1 y1 z1
1  4  6 10
2  1  4  5
3  1  9 10
4  1  6  7
5  1  4  5
6  2  7  9
7  0  6  6
8  0  3  3
9  0  8  8
10 2  4  6
11 1  5  6
12 0  9  9
13 2 10 12
14 1  4  5
15 0  3  3
16 2  2  4
17 0  2  2
18 0  6  6
19 0  6  6
20 2  2  4

示例 2

> df2<-transform(df1,z1=ifelse(x1 df2

输出

  x1 y1 z1
1  4  6  2
2  1  4  3
3  1  9  8
4  1  6  5
5  1  4  3
6  2  7  5
7  0  6  6
8  0  3  3
9  0  8  8
10 2  4  2
11 1  5  4
12 0  9  9
13 2 10  8
14 1  4  3
15 0  3  3
16 2  2  4
17 0  2  2
18 0  6  6
19 0  6  6
20 2  2  4

示例 3

> df3<-transform(df1,z1=ifelse(x1==y1,x1*y1,x1/y1))
> df3

输出

  x1 y1 z1
1 4 6 0.6666667
2 1 4 0.2500000
3 1 9 0.1111111
4 1 6 0.1666667
5 1 4 0.2500000
6 2 7 0.2857143
7 0 6 0.0000000
8 0 3 0.0000000
9 0 8 0.0000000
10 2 4 0.5000000
11 1 5 0.2000000
12 0 9 0.0000000
13 2 10 0.2000000
14 1 4 0.2500000
15 0 3 0.0000000
16 2 2 4.0000000
17 0 2 0.0000000
18 0 6 0.0000000
19 0 6 0.0000000
20 2 2 4.0000000

更新于:2020-11-06

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告