将列的所有先前元素粘贴到具有最高分数的行中

时间:2016-08-10 16:32:02

标签: r data.table concatenation paste

这就是我的数据框架:

library(data.table)
dt <- fread('
    Product   Score    Description
    A          1         aapl 
    A          2         banana 
    A          3         orange
    B          1         coke
    B          2         pepsi
    C          1         butter
    D          1         milk 
')

我正在尝试获取每个产品的最高分数并将该行之前的所有描述与最高分数连接起来,因此输出如下所示:

  Product   Score(Max)    Description2
    A          3         aapl;banana;orange
    B          2         coke;pepsi
    C          1         butter
    D          1         milk 

我试过了

    dt[,Description2 := as.character(ifelse(!max(Score),NA,paste(shift(Description,1),
Description,sep=";"))),by=Product]

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我们按产品&#39;分组,获得&#39;得分的max&#39;和paste&#39;说明&#39;与collapse = ";"一起。

dt[, .(ScoreMax = max(Score), Description2 = paste(Description, collapse=";")), 
          by = .(Product)]
#   Product ScoreMax       Description2
#1:       A        3 aapl;banana;orange
#2:       B        2         coke;pepsi
#3:       C        1             butter
#4:       D        1               milk

使用:=(赋值)在初始数据集中创建一个新列。总结一下,我们可以将其保存在list中,或者在变量分组后使用.(