Borrar filtros
Borrar filtros

using accumarray to combine text

1 visualización (últimos 30 días)
Pete sherer
Pete sherer el 26 de En. de 2022
Respondida: Stephen23 el 22 de Ag. de 2022
Hi,
I am trying to use accumarray to concatenate string.
tdata = table([ 1 2 2 3 4 2]', ["a","b","c","d","e","f"]', 'VariableNames',{'EBID','Name'});
[uniqEBID,~,JGrp] = unique( tdata(:, {'EBID'}));
joinStr = @(tStr) { sprintf([repmat('%s|| ', 1, length( tStr)-1) '%s'], string( tStr))};
joinStr( tdata.Name) % anonymous function seems to do the job
However when running script below, i got error message
accumarray( JGrp, tdata.Name, [], joinStr)
Error using accumarray
Second input VAL must be a full numeric, logical, or char vector or scalar.
  1 comentario
Pete sherer
Pete sherer el 22 de Ag. de 2022
the answer should be
"a"
"b|| c|| f"
"d"
"e"

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 22 de Ag. de 2022
T = table([1;2;2;3;4;2], ["a";"b";"c";"d";"e";"f"], 'VariableNames',{'EBID','Name'})
T = 6×2 table
EBID Name ____ ____ 1 "a" 2 "b" 2 "c" 3 "d" 4 "e" 2 "f"
G = findgroups(T.EBID);
F = @(s)join(s,"||");
S = splitapply(F,T.Name,G)
S = 4×1 string array
"a" "b||c||f" "d" "e"

Más respuestas (1)

Voss
Voss el 26 de En. de 2022
Does this do what you want?
tdata = table([ 1 2 2 3 4 2]', ["a","b","c","d","e","f"]', 'VariableNames',{'EBID','Name'});
[uniqEBID,~,JGrp] = unique( tdata(:, {'EBID'}));
joinStr = @(tStr) { sprintf([repmat('%s|| ', 1, length( tStr)-1) '%s'], string( tStr))};
% joinStr( tdata.Name) % anonymous function seems to do the job
joinStr( tdata.Name(JGrp))
ans = 1×1 cell array
{'a|| b|| b|| c|| d|| b'}

Categorías

Más información sobre Trigonometry en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by