我正在处理一个古怪的问题。 我有一些类似的数据:
dt<-data.table(time = c('13:00','13:00','13:00','13:15','13:15'),group=c('A','A','B','A','B'),code=c('11b','16b','22c','9c','7y'))
time group code
1: 13:00 A 11b
2: 13:00 A 16b
3: 13:00 B 22c
4: 13:15 A 9c
5: 13:15 B 7y
我试图做以下事情。创建一个新列(:= Fgroup
),该列在group
上进行值调整,并按time
进行汇总。
因此,如果group == A
,则将值粘贴到code
就足够了。如果group == B
,我需要按time
粘贴代码A(或代码,如果有很多代码),则需要 time group code Fcode
1: 13:00 A 11b 11b
2: 13:00 A 16b 16b
3: 13:00 B 22c 11b,16b
4: 13:15 A 9c 9c
5: 13:15 B 7y 9c
。
换句话说:
word-wrap:break-word;
任何简单的出路? 谢谢
答案 0 :(得分:2)
你的意思是拥有这样的东西吗?
library(data.table)
dt[, Fcode := paste(code[group == 'A'], collapse = ","), by = time][group == 'A', Fcode := code]
给出了
> dt
time group code Fcode
1: 13:00 A 11b 11b
2: 13:00 A 16b 16b
3: 13:00 B 22c 11b,16b
4: 13:15 A 9c 9c
5: 13:15 B 7y 9c
示例数据:
dt <- data.table(time = c('13:00','13:00','13:00','13:15','13:15'),
group= c('A','A','B','A','B'),
code = c('11b','16b','22c','9c','7y'))
答案 1 :(得分:1)
仅按时间分组,添加包含所有粘贴代码值的新列。然后将其加入原始表格。按时和组分组并使用ifelse创建新列以使用代码或先前创建的列
dt <- dt[,.(code_temp=paste(ifelse(group!="B",code,""),collapse=", ")), by="time"][
dt, on="time"][
, Fcode := ifelse(group!="B",code,code_temp)][
group=="B",Fcode := substr(Fcode,1,nchar(Fcode)-2)]
最后一段代码删除了逗号。
这符合您对问题的描述和问题中的输出,但我不确定您对C组等的引用。