我想将data.table cols的子集转换为新类.这里有一个流行的问题(在data.table中转换列类)但是答案创建了一个新对象,而不是在starter对象上运行.
举个例子:
dat <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
cols <- c('ID', 'Quarter')
Run Code Online (Sandbox Code Playgroud)
如何最好地将cols列转换为(例如)一个因子?在普通的data.frame中,你可以这样做:
dat[, cols] <- lapply(dat[, cols], factor)
Run Code Online (Sandbox Code Playgroud)
但这对data.table不起作用,也不适用
dat[, .SD := lapply(.SD, factor), .SDcols = cols]
Run Code Online (Sandbox Code Playgroud)
来自Matt Dowle(2013年12月)的链接问题中的评论表明以下情况很好,但看起来不那么优雅.
for (j in cols) set(dat, j = j, value = factor(dat[[j]]))
Run Code Online (Sandbox Code Playgroud)
目前是否有更好的data.table答案(即更短+不生成计数器变量),或者我应该只使用上面的+ rm(j)?
取消列出data.table中的嵌套列表列.假设所有列表元素都是相同的类型.列表元素已命名,名称也必须处理.
它在某种程度上与data.table聚合到列表列的操作相反.
我认为值得在SO data.table知识库中使用它.
我目前的解决方法方法如下,我正在寻找更多的规范答案.
library(data.table)
dt <- data.table(
a = letters[1:3],
l = list(list(c1=6L, c2=4L), list(x=2L, y=4L, z=3L), list())
)
dt[]
# a l
# 1: a <list>
# 2: b <list>
# 3: c <list>
dt[,.(a = rep(a,length(l)),
nm = names(unlist(l)),
ul = unlist(l)),
.(id = seq_along(a))
][, id := NULL
][]
# a nm ul
# 1: a c1 6
# 2: a c2 4
# 3: b x 2
# 4: b y …Run Code Online (Sandbox Code Playgroud)