这就是我的数据框架:
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]
感谢您的帮助!
答案 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
中,或者在变量分组后使用.(
。