我想在我的数据框架中创建一个列,在那里我可以将数据帧的另外两列相加。
df <- data.frame(x = 1:10, y = 11:20)
例如,我想添加第三列z,其中包含:
z <- c(12, 14, 16,..., 30)
提前致谢。
答案 0 :(得分:7)
函数rowSums
将起到作用:
df$z <- rowSums(df)
结果:
x y z
1 1 11 12
2 2 12 14
3 3 13 16
4 4 14 18
5 5 15 20
6 6 16 22
7 7 17 24
8 8 18 26
9 9 19 28
10 10 20 30
答案 1 :(得分:6)
R中的算术是vectorized。这是你应该阅读的一个非常重要的概念。数据框中的列是向量,因此您的解决方案就是:
df$z <- df$x + df$y
df$z
## [1] 12 14 16 18 20 22 24 26 28 30
就像你刚刚x
&amp; y
独立向量:
x <- 1:10
y <- 11:20
x + y
## [1] 12 14 16 18 20 22 24 26 28 30
答案 2 :(得分:2)
df <- data.frame(x = 1:10, y = 11:20)
df$z<-c(df$x+df$y)
df
x y z
1 1 11 12
2 2 12 14
3 3 13 16
4 4 14 18
5 5 15 20
6 6 16 22
7 7 17 24
8 8 18 26
9 9 19 28
10 10 20 30
答案 3 :(得分:2)
使用data.table:
> library(data.table)
> setDT(df)[,z:=x+y,]
> df
x y z
1: 1 11 12
2: 2 12 14
3: 3 13 16
4: 4 14 18
5: 5 15 20
6: 6 16 22
7: 7 17 24
8: 8 18 26
9: 9 19 28
10: 10 20 30
答案 4 :(得分:1)
使用dplyr:
library(dplyr)
df %>% group_by(x) %>% mutate(z = sum(x+y))
我在此答案中学到的另外两个选项是避免分组和编写列名称Sum across multiple columns with dplyr
df %>% mutate(z = Reduce(`+`, .))
df %>% mutate(z = rowSums(.))
输出:
Source: local data frame [10 x 3]
Groups: x
x y z
1 1 11 12
2 2 12 14
3 3 13 16
4 4 14 18
5 5 15 20
6 6 16 22
7 7 17 24
8 8 18 26
9 9 19 28
10 10 20 30