【问题标题】:Combining columns conditionally using data.table in R在 R 中使用 data.table 有条件地组合列
【发布时间】:2014-04-20 16:41:39
【问题描述】:

我有一个包含一组植物的数据集。其中两种植物具有多条生产线。在分析数据时,我希望有一列将两个工厂放在一起,这些工厂有多条生产线,但其他所有生产线都原样。这是我的可重现数据集:

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 方式来生成它。

【问题讨论】:

  • 您的可重现数据的最后一列已损坏:它必须是 10 的倍数。

标签: r combinations data.table conditional-statements


【解决方案1】:

我不明白您想要的输出是什么,但希望这对您有所帮助。这是一个data.table 解决方案,用于查找所有独特的植物系:

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

【讨论】:

    【解决方案2】:

    当您使用data.table's 时,您不需要这样做。相反,您应该设置 key 或使用 ad-hoc by(如下例所示)。这是data.table 中运营的关键基础之一。


    使用by的玩具示例:

    请看下面的玩具示例。我们将idgrp 变量的评级相加。因此,在存在重复项的情况下,它们会被求和,但分组变量的唯一组合将由它们自己处理(因此请注意最后一行的 ratingsum_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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-19
      • 2017-12-13
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2018-07-29
      • 1970-01-01
      相关资源
      最近更新 更多