【发布时间】:2018-12-18 09:25:18
【问题描述】:
这是数据样本:
zz <- "
id Sub_Segment1 Sub_Segment2 Sub_Segment3 Sub_Segment4 Sub_Segment5
1 x x1 r y1 z1
1 x x1 r y1 z1
1 x x1 r y1 z1
1 x x1 r y1 z1
1 x x1 r y1 z1
1 x x1 r y1 z1
1 x x1 r y1 z1
2 y x2 r y2 z1
2 y x2 r y2 z1
2 y x2 r y2 z1
2 y x2 r y2 z1
2 y x2 r y2 z1
"
Data <- read.table(text=zz, header = TRUE)
setDT(Data)
如果我将修改应用到整个表,它会返回 NA:
Data[(length(unique(Sub_Segment1[Sub_Segment1!=""]))==1),name:="test" , by=id ]
返回:
id Sub_Segment1 Sub_Segment2 Sub_Segment3 Sub_Segment4 Sub_Segment5 name
1: 1 x x1 r y1 z1 NA
2: 1 x x1 r y1 z1 NA
3: 1 x x1 r y1 z1 NA
4: 1 x x1 r y1 z1 NA
5: 1 x x1 r y1 z1 NA
6: 1 x x1 r y1 z1 NA
7: 1 x x1 r y1 z1 NA
8: 2 y x2 r y2 z1 NA
9: 2 y x2 r y2 z1 NA
10: 2 y x2 r y2 z1 NA
11: 2 y x2 r y2 z1 NA
12: 2 y x2 r y2 z1 NA
但如果我在子段中只取一个具有恒定值的样本,它会起作用:
new_data = Data[id ==1]
new_data[(length(unique(Sub_Segment1[Sub_Segment1!=""]))==1),name:="test" , by=id ]
返回正确
id Sub_Segment1 Sub_Segment2 Sub_Segment3 Sub_Segment4 Sub_Segment5 name
1: 1 x x1 r y1 z1 test
2: 1 x x1 r y1 z1 test
3: 1 x x1 r y1 z1 test
4: 1 x x1 r y1 z1 test
5: 1 x x1 r y1 z1 test
6: 1 x x1 r y1 z1 test
7: 1 x x1 r y1 z1 test
和
Data[id ==1,(length(unique(Sub_Segment1[Sub_Segment1!=""]))==1) ] # returns TRUE
我应该如何修改代码以将我的函数应用于 data.table 中的每一组数据集?
【问题讨论】:
-
问题是在你的修改中,你做了:
(length(unique(Sub_Segment1[Sub_Segment1!=""]))==1),这对我来说不匹配任何行。 -
@ira 如果 group_by 应用它应该匹配,但它不是
-
所以您想对 group by 中的每个组应用过滤条件?
-
@ira 对,我想对过滤后的数据应用过滤条件和修改
-
data.table中的i-expression不按组操作
标签: r if-statement data.table filtering grouping