Вот решение base
clientVec <- unique(df['client',])
# with lapply
out <- lapply(seq_along(clientVec), function (k) df[,df['client',] == clientVec[k]])
out
# [[1]]
# [,1] [,2] [,3] [,4]
# client "A" "A" "A" "A"
# figure "36" "81" "47" "90"
#
# [[2]]
# [,1] [,2] [,3] [,4]
# client "B" "B" "B" "B"
# figure "95" "14" "58" "91"
Если вместо этого вам нужен фрейм данных, просто используйте do.call(rbind, ...)
do.call(rbind, out)
# [,1] [,2] [,3] [,4]
# client "A" "A" "A" "A"
# figure "36" "81" "47" "90"
# client "B" "B" "B" "B"
# figure "95" "14" "58" "91"
с данными
set.seed(123)
df <- t(data.frame(client = rep(LETTERS[1:2],c(4L,4L)), figure = sample(10:100, 8L, replace = TRUE)))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# client "A" "A" "A" "A" "B" "B" "B" "B"
# figure "36" "81" "47" "90" "95" "14" "58" "91"