gpt4 book ai didi

r - 将两个data.tables相乘,保留所有可能性

转载 作者:行者123 更新时间:2023-12-03 18:26:11 26 4
gpt4 key购买 nike

到目前为止,我找不到重复的副本。

我的问题如下:

我有两个data.tables。一列包含两列(featurea,count),另一列包含三列(featureb,featurec,count)。我想乘以(?),以便拥有所有可能性的新data.table。诀窍是这些功能不匹配,因此merge解决方案可能无法解决问题。

MRE如下:

# two columns
DT1 <- data.table(featurea =c("type1","type2"), count = c(2,3))

# featurea count
#1: type1 2
#2: type2 3

#three columns
DT2 <- data.table(origin =c("house","park","park"), color =c("red","blue","red"),count =c(2,1,2))

# origin color count
#1: house red 2
#2: park blue 1
#3: park red 2

在这种情况下,我的预期结果是一个 data.table,如下所示:
> DT3
origin color featurea total
1: house red type1 4
2: house red type2 6
3: park blue type1 2
4: park blue type2 3
5: park red type1 4
6: park red type2 6

最佳答案

这将是一种方式。首先,我用DT2包中的expandRows()扩展了splitstackshape中的行。自从我指定了count = 2, count.is.col = FALSE以来,每一行都重复了两次。然后,我照顾了乘法并创建了一个名为total的新列。同时,我为featurea创建了一个新列。最后,我删除了count

library(data.table)
library(splitstackshape)

expandRows(DT2, count = nrow(DT1), count.is.col = FALSE)[,
`:=` (total = count * DT1[, count], featurea = DT1[, featurea])][, count := NULL]

编辑

如果您不想添加其他软件包,可以在David的评论中尝试David的想法。
DT2[rep(1:.N, nrow(DT1))][,
`:=`(total = count * DT1$count, featurea = DT1$featurea, count = NULL)][]



# origin color total featurea
#1: house red 4 type1
#2: house red 6 type2
#3: park blue 2 type1
#4: park blue 3 type2
#5: park red 4 type1
#6: park red 6 type2

关于r - 将两个data.tables相乘,保留所有可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41262503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com