通过引用索引添加 data.frame 列的更好方法

Better way of adding data.frame columns by referring to indeces

这个问题看起来很基础,但我一直找不到答案。

我想通过引用索引将 data.frame 的列添加到一起。

假设我想添加第 1、2 和 4 列。

df <- data.frame(
  a=rep(1, 5),
  b=rep(2, 5),
  c=rep(3, 5),
  d=rep(4, 5)
)

我知道明确引用列名我可以做到

> df$a + df$b + df$d
[1] 7 7 7 7 7

并且指的是我能做的事情

> df[1] + df[2] + df[4]
  a
1 7
2 7
3 7
4 7
5 7

但是,上面的索引选项要求我为要添加的每一列写出 data.frame 的名称。

有没有办法将这些列加在一起,同时只引用索引和 data.frame 一次?

您可以使用 rowSums 函数并通过在 df[, ] 中设置列​​号向量来引用列。

rowSums(df[, c(1,2,4)]
[1] 7 7 7 7 7

或在data.table内:

dt[, sum := rowSums(.SD), .SDcols = c(1, 2, 4)]
dt[, sum := rowSums(.SD), .SDcols = c('a', 'b', 'd')]
with(df, a + b + d)
[1] 7 7 7 7 7

使用data.table的另一个解决方案:

require(data.table)  # Load package
dt <- data.table(df) # Convert to data.table
dt[, a + b + d]      # Sum columns
[1] 7 7 7 7 7  

另一种选择是

Reduce(`+`, df[-3])
#[1] 7 7 7 7 7

或@PierreLafortune 的变体

df$a + df$b + df$d
#[1] 7 7 7 7 7