У меня есть таблица данных, как показано ниже.Я хотел бы разделить на '/', отсортировать результирующий список, принять уникальные значения, а затем вставить его, свернув на '/' в R. Я хотел бы добиться этого в пакетах data.table или stringr.Возможно ли это?
ввод >>
> dt<-data.table(id=c('id1','id2','id3','id4','id5'),value=c('a/b/a/b','b/a/c/a/b','c/d/c/a','a/b/b','a/a/c/b'))
> dt
id value
1: id1 a/b/a/b
2: id2 b/a/c/a/b
3: id3 c/d/c/a
4: id4 a/b/b
5: id5 a/a/c/b
ожидаемый вывод >>
> dt
id value
1: id1 a/b
2: id2 a/b/c
3: id3 a/c/d
4: id4 a/b
5: id5 a/b/c
Я попробовал следующее, но это не сработало.
> dt<-dt[,value1:=paste(sort(unique(unlist(strsplit(value, "/")))),collapse='/')]
> dt
id value value1
1: id1 a/b/a/b a/b/c/d
2: id2 b/a/c/a/b a/b/c/d
3: id3 c/d/c/a a/b/c/d
4: id4 a/b/b a/b/c/d
5: id5 a/a/c/b a/b/c/d
Я также попытался использовать list и дал правильный результат, но это может стать громоздким, если число других переменных в таблице данных велико.
> dt<-dt[,list(value1=paste(sort(unique(unlist(strsplit(value,"/")))),collapse='/')),by=c('id','value')]
> dt
id value value1
1: id1 a/b/a/b a/b
2: id2 b/a/c/a/b a/b/c
3: id3 c/d/c/a a/c/d
4: id4 a/b/b a/b
5: id5 a/a/c/b a/b/c
Есть ли более простой способ сделать это?