2016-08-30 75 views
2

我在R的data.table中有几个列(字面上)命名为A1,A2,A3,... A50。不幸的是,我的表中的列没有按字母顺序排列。在data.table中创建新列

我想创建一个名为sumA的新列,它将包含A1 + A2 + ... + A50。

什么是简单的(而不是繁琐的)这样做?

+0

假设列是A1:A50 – akrun

+0

您可以使用'dt [,sumA:= Reduce(“+”,.SD)]'如果我有其他列B1,B2,... B50不想包含在sumA中? – wwl

+0

我发布了一个解决方案。 – akrun

回答

5

这里是一个选项与Reduce+

library(data.table) 
dt[, sumA := Reduce("+", .SD)] 

如果有其他列,即不是“A1:A50”等栏目中的数据集,使用.SDcols指定列选择

dt[, sumA := Reduce("+", .SD), .SDcols = paste0("A", 1:50)] 

或者如@Arun所述,如果列是有序的,则:可用于选择列

dt[, sumA := Reduce("+", .SD), .SDcols = A1:A50] 
+2

对于交互式使用,还可以指定'startcol:endcol',即'.SDcols = A1:A50'(假设它们是开始和结束列)。 – Arun

+2

谢谢!这工作完美。如果有任何新手想知道R在Reduce中的作用,请看这里:http://stackoverflow.com/questions/28545688/i-dont-understand-the-function-reduce-in-r – wwl

+3

@wwl有一点需要注意这种方法是对缺失值的处理。 'sum'函数有一个'na.rm'选项,而'+'没有(所以你不能“忽略”NA)。链接的问题显示了解决这个问题的方法。 – Frank