我有一组有一组植物的数据集。其中两种植物有多条生产线。在分析数据时,我希望有一个专栏可以将两个工厂放在一起,而所有其他工厂都按原样放在一起。这是我可重复的数据集:
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))
这是我正在寻找的附加列输出:
A1
B2
C3
D4
E5
A1
B2
C3
D6
E7
这是一个简单的例子,但我的真实数据集要大得多,所以我希望有一种优雅的data.table方式来生成它。
答案 0 :(得分:1)
使用data.table
时,您无需执行此操作。相反,您应该设置key
或使用 ad-hoc by
(就像我在下面的示例中所示)。这是data.table
中操作的关键基础之一。
by
的玩具示例:请看下面的玩具示例。我们按id
和grp
变量对评分求和。因此,如果存在重复项,它们会求和,但分组变量的唯一组合将由它们自己处理(因此请注意最后一行的rating
和sum_rating
的值,它具有唯一的分组变量组合(其他行在您的示例中各有两行):
# 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
答案 1 :(得分:0)
我不明白你想要的输出是什么,但希望这会对你有所帮助。这是一个data.table
解决方案,用于查找所有独特的植物系列:
> testset[,unique(paste0(plant, PlantID))]
[1] "A1" "B2" "C3" "D4" "D6" "E5" "E7"