[英]Renaming multiple columns in R data.table
這與Henrik提出的這個問題有關,按組在data.table中使用:=分配多列
但是,如果我想用給定的列名創建一個新的data.table而不是將新列分配給一個現有的列,該怎么辦?
f <- function(x){list(head(x,2),tail(x,2))}
dt <- data.table(group=sample(c('a','b'),10,replace = TRUE),val=1:10)
> dt
group val
1: b 1
2: b 2
3: a 3
4: b 4
5: a 5
6: b 6
7: a 7
8: a 8
9: b 9
10: b 10
我想通過調用函數f
獲得一個具有預定義列名的新data.table:
dt[,c('head','tail')=f(val),by=group]
我希望得到這個:
group head tail
1: a 1 8
2: a 3 10
3: b 2 6
4: b 5 9
但這給了我一個錯誤。 我可以做的是創建表,然后更改列名,但這似乎很麻煩:
> dt2 <- dt[,f(val),by=group]
> dt2
group V1 V2
1: a 1 8
2: a 3 10
3: b 2 6
4: b 5 9
> colnames(dt2)[-1] <- c('head','tail')
> dt2
group head tail
1: a 1 8
2: a 3 10
3: b 2 6
4: b 5 9
我可以打一個電話嗎?
通過按原樣運行代碼,這是我得到的錯誤:
dt[,c('head','tail')=f(val),by=group]
# Error: unexpected '=' in "dt2[,c('head','tail')="
問題是使用=
而不是:=
進行賦值。
關於您想要新的data.table的問題:
dt2 <- dt[, setNames(f(val), c('head', 'tail')), by = group]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.