通过R中的data.table自定义广播

问题描述 投票:0回答:1

这是我的数据

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?

r data.table reshape dcast
1个回答
0
投票

我们可以对数据集列进行子集化,并在...的lh上使用~为所有列指定,在公式的rhs上将其为'z'

dcast(dt[, setdiff(names(dt), 'd2'), with = FALSE], ... ~ z, value.var = 'd1')
© www.soinside.com 2019 - 2024. All rights reserved.