2016-08-30 73 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