在下面的代码中,我创建一个data.table并输入一些内容:
library(data.table)
int.tables <- c( "Sheet_A","TBL 002"
,"Sheet_B", "TBL 001"
,"Sheet_B", "TBL 004"
,"Sheet_C", "TBL 009")
int.tables<-data.table(matrix(int.tables,ncol = 2,byrow = T))
setnames(int.tables,c("sheet","table"))
level_Sheet_A <- list( "Level_1", "Level_2", "Level_3" )
int.tables[sheet == "Sheet_B" & table %in% c("TBL 001", "TBL 004")
, legend_levels := .(.(level_Sheet_A))]
但是,为了正确地在每行中将列表作为整个元素正确输入,在最后一行中需要使用奇怪的代码.(.())
。否则,输出将沿行枚举level_sheet_A
的元素。
有更好/更清洁的方法吗?
答案 0 :(得分:1)
我会这样写:
int.tables <- data.frame(sheet = c( "Sheet_A", "Sheet_B", "Sheet_B","Sheet_C"),
table = c("TBL 002","TBL 001", "TBL 004", "TBL 009"))
index <- int.tables$sheet == c("Sheet_B") &
int.tables$table %in% c("TBL 001", "TBL 004")
int.tables$legend_levels[index] <- list(c("Level_1", "Level_2", "Level_3" ))
然后,您删除对data.table
的依赖,并避免不必要的矩阵构造。如果您想添加类data.table
来获得漂亮的打印效果
class(int.tables) <- c("data.table", class(int.tables))