逐行求两列

时间:2014-10-10 11:29:04

标签: r dataframe

我想在我的数据框架中创建一个列,在那里我可以将数据帧的另外两列相加。

df <- data.frame(x = 1:10, y = 11:20)

例如,我想添加第三列z,其中包含:

z <- c(12, 14, 16,..., 30)

提前致谢。

5 个答案:

答案 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