我在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