Here is data sample:
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)
If I apply my modification to the whole table it returns NA:
Data[(length(unique(Sub_Segment1[Sub_Segment1!=""]))==1),name:="test" , by=id ]
returns:
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
But if I take only one sample with constant value in subsegment it works:
new_data = Data[id ==1]
new_data[(length(unique(Sub_Segment1[Sub_Segment1!=""]))==1) & id==1,name:="test" , by=id ]
returns correct
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
How should I modify code to apply my function to the whole dataset?
Aucun commentaire:
Enregistrer un commentaire