我在R的data.table中有几个列(字面上)命名为A1,A2,A3,... A50。不幸的是,我的表中的列没有按字母顺序排列。在data.table中创建新列
我想创建一个名为sumA的新列,它将包含A1 + A2 + ... + A50。
什么是简单的(而不是繁琐的)这样做?
我在R的data.table中有几个列(字面上)命名为A1,A2,A3,... A50。不幸的是,我的表中的列没有按字母顺序排列。在data.table中创建新列
我想创建一个名为sumA的新列,它将包含A1 + A2 + ... + A50。
什么是简单的(而不是繁琐的)这样做?
这里是一个选项与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]
对于交互式使用,还可以指定'startcol:endcol',即'.SDcols = A1:A50'(假设它们是开始和结束列)。 – Arun
谢谢!这工作完美。如果有任何新手想知道R在Reduce中的作用,请看这里:http://stackoverflow.com/questions/28545688/i-dont-understand-the-function-reduce-in-r – wwl
@wwl有一点需要注意这种方法是对缺失值的处理。 'sum'函数有一个'na.rm'选项,而'+'没有(所以你不能“忽略”NA)。链接的问题显示了解决这个问题的方法。 – Frank
假设列是A1:A50 – akrun
您可以使用'dt [,sumA:= Reduce(“+”,.SD)]'如果我有其他列B1,B2,... B50不想包含在sumA中? – wwl
我发布了一个解决方案。 – akrun