Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
data.table(R)按组聚合时从特定行粘贴值_R_Data.table_Aggregate - Fatal编程技术网

data.table(R)按组聚合时从特定行粘贴值

data.table(R)按组聚合时从特定行粘贴值,r,data.table,aggregate,R,Data.table,Aggregate,我正在处理一个古怪的问题。 我有一些数据如下: 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

我正在处理一个古怪的问题。 我有一些数据如下:

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
有简单的出路吗?
感谢您

仅对时间进行分组,添加一个包含所有粘贴代码值的新列。然后将其加入到原始表中。按时间分组并分组,然后使用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)]

dt单独按时间分组,添加一个包含所有粘贴的代码值的新列。然后将其加入到原始表中。按时间分组并分组,然后使用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)]

dt你的意思是要有这样的东西吗

库(data.table)
dt[,Fcode:=粘贴(代码[组=='A'],折叠=,“”,按=时间][组=='A',Fcode:=代码]

> 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'))

dt你的意思是要有这样的东西吗

库(data.table)
dt[,Fcode:=粘贴(代码[组=='A'],折叠=,“”,按=时间][组=='A',Fcode:=代码]

> 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'))


dt只有A组或B组?B组每次只有一行?C组也有,但适用于A组的规则相同(只需粘贴相同的值)。按时间,B组可以有更多的行。您如何确定组的层次结构?你为什么不检查B组到A组的时间是否重叠?C组是否应与A组和B组进行比较?你的问题不是很清楚。我没说逻辑看起来很奇怪。我问了一个特别的问题:你如何决定团队的层次结构?B之后的组怎么办?换句话说,A
中的
%。这就是我对他们问题的理解。如果问题不清楚,就没有理由回答。@Davidernburg组的层次结构如下:A和C的代码保持不变。B的代码采用A上的值。时间戳为我们提供了代码应替换B代码的信息。“我们只有3个组。@Davidernburg OP规定C组应该像A组一样对待,并没有暗示存在其他组。使用
=“B”
应该足够了。但我很感激你的建议。这是一本非常实用的手册。OP应该如何使用这个?手动编写每个组?OP没有共享足够的信息来说明,但最坏的情况可能是%
中的
%。这就是我对他们问题的理解。如果问题不清楚,就没有理由回答。@Davidernburg组的层次结构如下:A和C的代码保持不变。B的代码采用A上的值。时间戳为我们提供了代码应替换B代码的信息。“我们只有3个组。@Davidernburg OP规定C组应该像A组一样对待,并没有暗示存在其他组。使用
=“B”
应该足够了。但我很感激你的建议。这也是一本手册,只适用于两组。或者使用其他名称的组。这也是非常手动的,不能扩展到两个以上的组。或使用其他名称的组。