通过引用索引添加 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
这个问题看起来很基础,但我一直找不到答案。
我想通过引用索引将 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