在R中使用data.table有条件地组合列

在R中使用data.table有条件地组合列,r,combinations,data.table,conditional-statements,R,Combinations,Data.table,Conditional Statements,我有一个包含一组植物的数据集。其中两种植物有多个品系。在分析数据时,我希望有一个专栏,将两个有多条生产线的工厂放在一起,但所有其他工厂都是这样。以下是我的可复制数据集: testset <- data.table(date=as.Date(c("2013-07-02","2013-08-03","2013-09-04","2013-10-05","2013-11-06")), yr = c(2013,2013,2013,2013,2013), mo = c(07,08,09,10,11),

我有一个包含一组植物的数据集。其中两种植物有多个品系。在分析数据时,我希望有一个专栏,将两个有多条生产线的工厂放在一起,但所有其他工厂都是这样。以下是我的可复制数据集:

testset <- data.table(date=as.Date(c("2013-07-02","2013-08-03","2013-09-04","2013-10-05","2013-11-06")), yr = c(2013,2013,2013,2013,2013), mo = c(07,08,09,10,11), da = c(02,03,04,05,06), plant = LETTERS[1:5], PlantID = c(1,2,3,4,5,1,2,3,6,7), product = as.factor(letters[26:22]), rating = runif(25))

testset我不明白您想要的输出是什么,但希望这能帮助您。下面是一个
数据表
解决方案,用于查找所有独特的工厂生产线:

> testset[,unique(paste0(plant, PlantID))]
[1] "A1" "B2" "C3" "D4" "D6" "E5" "E7"

使用
data.table
时不需要这样做。相反,您应该通过
设置一个
或使用一个特别的
(如下面的示例所示)。这是
data.table
中操作的关键基础之一


使用
by
的玩具示例: 看看下面的玩具示例。我们通过
id
grp
变量对评级进行求和。因此,如果存在重复项,它们将被求和,但分组变量的唯一组合将被自己处理(因此请注意
评级
总和评级
的值,最后一行具有分组变量的唯一组合(其他行各有两行,如您的示例所示):

#使此数据可复制
种子(1)

dt您的可复制数据的最后一列被破坏:它需要是10的倍数。
# Make this data reproducible
set.seed(1)
dt <- data.table( id = c( rep( 1:2 , 2 ) , 1 ) , grp = c( rep( 1:2 , 2 ) , 3 ) , rating = sample( 5 , 5 , TRUE ) ) 
#   id grp rating
#1:  1   1      4
#2:  2   2      1
#3:  1   1      3
#4:  2   2      4
#5:  1   3      4

# Sum by 'id' and 'grp'...
dt[ , sum_rating := sum( rating ) , by = list( id , grp ) ]
dt
#   id grp rating sum_rating
#1:  1   1      4          7
#2:  2   2      1          5
#3:  1   1      3          7
#4:  2   2      4          5
#5:  1   3      4          4  <=====  rating and sum_rating are the same because this is a unique row