这是我的数据
dt = data.table(x=sample(8,20,TRUE),
y=sample(2,20,TRUE),
w = sample(letters[5:20], 20, TRUE),
u = sample(letters[2:25], 20, TRUE),
z=sample(letters[1:4], 20,TRUE),
d1 = runif(20), d2=runif(20))
这是我的广播代码。
DC_1 = dcast.data.table(dt,x+w ~ z, value.var = "d1")
这很好。但是,我的数据还可以另外包括列“ a”和列“ s”,如下所示。它们都可以包括在内,可以只包含一个,也可以不包含。
dt = data.table(x=sample(8,20,TRUE),
y=sample(2,20,TRUE),
w = sample(letters[5:20], 20, TRUE),
u = sample(letters[2:25], 20, TRUE),
z=sample(letters[1:4], 20,TRUE),
a = sample(letters[1:25], 20, T),
s = sample(letters[2:17], 20, T),
d1 = runif(20), d2=runif(20))
然而,其他列将始终为characters。另外,我的数据必须始终强制转换为列“ z”,并且值变量始终为“ d1”
如何通过data.table进行广播,以使其获取数据表中可用的所有字符列(z除外)并将其转换为z?
我们可以对数据集列进行子集化,并在...
的lh上使用~
为所有列指定,在公式的rhs上将其为'z'
dcast(dt[, setdiff(names(dt), 'd2'), with = FALSE], ... ~ z, value.var = 'd1')