2017-02-07 74 views
0

是否有一種更好的方法來更新從data.table中名稱選擇的列的範圍?R:更新data.table中的列名稱範圍

例如,假設我們有

dt <- data.table(A = LETTERS[1:5], B = LETTERS[6:10], C = LETTERS[11:15]) 

我想從報價A添加到所有列使用function(x) paste0('"', x, '"')到B點。

我想:

dt[, .SD := lapply(.SD, function(x) paste0('"', x, '"')), .SDcols=A:B] 

沒有結果。

+0

請問'的cols < - C( 「A」, 「B」); dt [,(cols):= lapply(.SD,dQuote),.SDcols = cols]'工作? –

+0

@DavidArenburg OP的問題是他不想手動創建名稱 – akrun

+0

@DavidArenburg作爲附註,我使用dQuote而不是paste0將引號添加到多列並保存到csv文件。我注意到使用dQuote時文件大小几乎是其兩倍。你知道爲什麼嗎? – mat

回答

1

我們可以使用names,甚至有一些像c("A", "B")

f1 <- function(dat, v1) Reduce(seq, which(colnames(dat) %in% v1)) 
i1 <- f1(dt, c('A', 'B')) 
dt[, (i1) := lapply(.SD, function(x) paste0('"', x, '"')), .SDcols=A:B] 
+0

事情是,我不一定有列的位置,也不能手動列出它們,因爲我可能有數百個。 – mat

+0

@mat但你怎麼知道它在'A:B'範圍內?如果這些列是隨機的,唯一的辦法是在沒有任何模式的情況下手動執行此操作。 – akrun

+0

它們不是隨機排列的。我唯一知道的是,在我的data.table中的某個地方,有4個連續的列名爲「A」,「B」,「C」,「D」。 – mat