簡體   English   中英

重命名R data.table中的多列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM